From 1098e79d83c0659c13cf37a49402ce85162cf829 Mon Sep 17 00:00:00 2001 From: Alexander Troshkov <20989940+aednlaxer@users.noreply.github.com> Date: Fri, 24 Jan 2025 13:15:55 +0200 Subject: [PATCH 01/18] Add BitmapRegistry --- .../example/assets/red_rectangle.png | Bin 0 -> 85 bytes .../example/lib/bitmap_registry.dart | 125 ++ .../google_maps_flutter/example/lib/main.dart | 2 + .../google_maps_flutter/example/pubspec.yaml | 5 + .../lib/google_maps_flutter.dart | 1 + .../lib/src/bitmap_registry.dart | 52 + .../google_maps_flutter/pubspec.yaml | 5 + .../flutter/plugins/googlemaps/Convert.java | 71 +- .../plugins/googlemaps/GoogleMapBuilder.java | 6 +- .../googlemaps/GoogleMapController.java | 15 +- .../plugins/googlemaps/GoogleMapFactory.java | 7 +- .../plugins/googlemaps/GoogleMapsPlugin.java | 12 +- .../plugins/googlemaps/ImageRegistry.java | 43 + .../plugins/googlemaps/MarkersController.java | 14 +- .../flutter/plugins/googlemaps/Messages.java | 1652 ++++++--------- .../googlemaps/PolylinesController.java | 11 +- .../example/pubspec.yaml | 5 + .../lib/src/google_maps_flutter_android.dart | 24 + .../lib/src/messages.g.dart | 856 ++++---- .../pigeons/messages.dart | 22 + .../google_maps_flutter_android/pubspec.yaml | 5 + .../example/ios14/pubspec.yaml | 5 + .../example/ios15/pubspec.yaml | 5 + .../shared/maps_example_dart/pubspec.yaml | 5 + .../ios/Classes/FLTGoogleMapsPlugin.h | 1 + .../ios/Classes/GoogleMapController.m | 12 +- .../ios/Classes/GoogleMapMarkerController.h | 8 +- .../ios/Classes/GoogleMapMarkerController.m | 34 +- .../ios/Classes/ImageRegistry.h | 18 + .../ios/Classes/ImageRegistry.m | 53 + .../ios/Classes/messages.g.h | 715 ++++--- .../ios/Classes/messages.g.m | 1779 ++++++++--------- .../lib/src/google_maps_flutter_ios.dart | 21 + .../lib/src/messages.g.dart | 835 ++++---- .../pigeons/messages.dart | 22 + .../google_maps_flutter_ios/pubspec.yaml | 5 + .../google_maps_flutter_platform.dart | 17 + .../lib/src/types/bitmap.dart | 20 + .../example/pubspec.yaml | 8 + .../lib/google_maps_flutter_web.dart | 1 + .../lib/src/convert.dart | 13 +- .../lib/src/google_maps_flutter_web.dart | 15 + .../lib/src/image_registry.dart | 39 + .../google_maps_flutter_web/pubspec.yaml | 5 + 44 files changed, 3253 insertions(+), 3316 deletions(-) create mode 100644 packages/google_maps_flutter/google_maps_flutter/example/assets/red_rectangle.png create mode 100644 packages/google_maps_flutter/google_maps_flutter/example/lib/bitmap_registry.dart create mode 100644 packages/google_maps_flutter/google_maps_flutter/lib/src/bitmap_registry.dart create mode 100644 packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java create mode 100644 packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/ImageRegistry.h create mode 100644 packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/ImageRegistry.m create mode 100644 packages/google_maps_flutter/google_maps_flutter_web/lib/src/image_registry.dart diff --git a/packages/google_maps_flutter/google_maps_flutter/example/assets/red_rectangle.png b/packages/google_maps_flutter/google_maps_flutter/example/assets/red_rectangle.png new file mode 100644 index 0000000000000000000000000000000000000000..72b3c669793e4e9383770ac46e6a6b53540be95b GIT binary patch literal 85 zcmeAS@N?(olHy`uVBq!ia0vp^4nS createState() => _BitmapRegistryBodyState(); +} + +class _BitmapRegistryBodyState extends State<_BitmapRegistryBody> { + final Set markers = {}; + + @override + Widget build(BuildContext context) { + return Column( + children: [ + Expanded( + child: GoogleMap( + markers: markers, + initialCameraPosition: const CameraPosition( + target: LatLng(0, 0), + zoom: 1.0, + ), + ), + ), + MaterialButton( + onPressed: () async { + final AssetMapBitmap bitmap = await BitmapDescriptor.asset( + ImageConfiguration.empty, + 'assets/red_rectangle.png', + ); + + _updateMarkers(bitmap); + }, + child: const Text('Test 1 (asset), no registry'), + ), + MaterialButton( + onPressed: () async { + final AssetMapBitmap asset = await BitmapDescriptor.asset( + ImageConfiguration.empty, + 'assets/red_rectangle.png', + ); + final RegisteredMapBitmap registeredBitmap = + await GoogleMapBitmapRegistry.instance.register(asset); + _updateMarkers(registeredBitmap); + }, + child: const Text('Test 1 (asset), with registry'), + ), + const Divider(), + MaterialButton( + onPressed: () async { + final ByteData byteData = + await rootBundle.load('assets/red_rectangle.png'); + final Uint8List bytes = byteData.buffer.asUint8List(); + final BytesMapBitmap bitmap = BitmapDescriptor.bytes(bytes); + _updateMarkers(bitmap); + }, + child: const Text('Test 2 (bytes), no registry'), + ), + MaterialButton( + onPressed: () async { + final ByteData byteData = + await rootBundle.load('assets/red_rectangle.png'); + final Uint8List bytes = byteData.buffer.asUint8List(); + final BytesMapBitmap bytesBitmap = BitmapDescriptor.bytes(bytes); + final RegisteredMapBitmap registeredBitmap = + await GoogleMapBitmapRegistry.instance.register(bytesBitmap); + _updateMarkers(registeredBitmap); + }, + child: const Text('Test 2 (bytes), with registry'), + ), + ], + ); + } + + Marker _createMarker(int id, BitmapDescriptor bitmap) { + return Marker( + markerId: MarkerId('$id'), + icon: bitmap, + position: LatLng( + Random().nextDouble() * 100 - 50, + Random().nextDouble() * 100 - 50, + ), + ); + } + + void _updateMarkers(BitmapDescriptor bitmap) { + final List newMarkers = List.generate( + _numberOfMarkers, + (int i) => _createMarker(i, bitmap), + ); + + setState(() { + markers + ..clear() + ..addAll(newMarkers); + }); + } +} diff --git a/packages/google_maps_flutter/google_maps_flutter/example/lib/main.dart b/packages/google_maps_flutter/google_maps_flutter/example/lib/main.dart index 73a47db723e..3ebe35838c9 100644 --- a/packages/google_maps_flutter/google_maps_flutter/example/lib/main.dart +++ b/packages/google_maps_flutter/google_maps_flutter/example/lib/main.dart @@ -9,6 +9,7 @@ import 'package:google_maps_flutter_android/google_maps_flutter_android.dart'; import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; import 'animate_camera.dart'; +import 'bitmap_registry.dart'; import 'clustering.dart'; import 'heatmap.dart'; import 'lite_mode.dart'; @@ -47,6 +48,7 @@ final List _allPages = [ const ClusteringPage(), const MapIdPage(), const HeatmapPage(), + const BitmapRegistryPage(), ]; /// MapsDemo is the Main Application. diff --git a/packages/google_maps_flutter/google_maps_flutter/example/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter/example/pubspec.yaml index 0a949e262bb..95ca78d31db 100644 --- a/packages/google_maps_flutter/google_maps_flutter/example/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter/example/pubspec.yaml @@ -33,3 +33,8 @@ flutter: uses-material-design: true assets: - assets/ + +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + {google_maps_flutter_android: {path: ../../../../packages/google_maps_flutter/google_maps_flutter_android}, google_maps_flutter_ios: {path: ../../../../packages/google_maps_flutter/google_maps_flutter_ios}, google_maps_flutter_platform_interface: {path: ../../../../packages/google_maps_flutter/google_maps_flutter_platform_interface}, google_maps_flutter_web: {path: ../../../../packages/google_maps_flutter/google_maps_flutter_web}} diff --git a/packages/google_maps_flutter/google_maps_flutter/lib/google_maps_flutter.dart b/packages/google_maps_flutter/google_maps_flutter/lib/google_maps_flutter.dart index 66952bbe062..75cb3b97d19 100644 --- a/packages/google_maps_flutter/google_maps_flutter/lib/google_maps_flutter.dart +++ b/packages/google_maps_flutter/google_maps_flutter/lib/google_maps_flutter.dart @@ -59,3 +59,4 @@ export 'package:google_maps_flutter_platform_interface/google_maps_flutter_platf part 'src/controller.dart'; part 'src/google_map.dart'; +part 'src/bitmap_registry.dart'; diff --git a/packages/google_maps_flutter/google_maps_flutter/lib/src/bitmap_registry.dart b/packages/google_maps_flutter/google_maps_flutter/lib/src/bitmap_registry.dart new file mode 100644 index 00000000000..ceff6e9567d --- /dev/null +++ b/packages/google_maps_flutter/google_maps_flutter/lib/src/bitmap_registry.dart @@ -0,0 +1,52 @@ +part of '../google_maps_flutter.dart'; + +/// A bitmap registry. Bitmaps can be created before they are used in markers +/// and then registered with the registry. This allows for more efficient +/// rendering of markers on the map. For example, if multiple markers use the +/// same bitmap, bitmap can be registered once and then reused. +/// +/// Using bitmap registry is optional. +/// +/// Example: +/// ```dart +/// // Register a bitmap +/// final registeredBitmap = await GoogleMapBitmapRegistry.instance.register( +/// Bitmap.fromAsset('assets/image.png'), +/// ); +/// +/// // Use the registered bitmap as marker icon +/// Marker( +/// markerId: MarkerId('markerId'), +/// icon: registeredBitmap, +/// position: LatLng(0, 0) +/// ), +/// ) +/// ``` +class GoogleMapBitmapRegistry { + GoogleMapBitmapRegistry._(); + + /// The singleton instance of [GoogleMapBitmapRegistry]. + static final GoogleMapBitmapRegistry instance = GoogleMapBitmapRegistry._(); + + // The number of registered images. Also used as a unique identifier for each + // registered image. + int _imageCount = 0; + + /// Registers a [bitmap] with the registry. + Future register(MapBitmap bitmap) async { + _imageCount++; + final int id = _imageCount; + await GoogleMapsFlutterPlatform.instance.registerBitmap(id, bitmap); + return RegisteredMapBitmap(id: id); + } + + /// Unregisters a bitmap with the given [id]. + Future unregister(int id) { + return GoogleMapsFlutterPlatform.instance.unregisterBitmap(id); + } + + /// Unregister all previously registered bitmaps and clear the cache. + Future clear() { + return GoogleMapsFlutterPlatform.instance.clearBitmapCache(); + } +} diff --git a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml index 6afe27288aa..31a9fcdf207 100644 --- a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml @@ -41,3 +41,8 @@ topics: # The example deliberately includes limited-use secrets. false_secrets: - /example/web/index.html + +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + {google_maps_flutter_android: {path: ../../../packages/google_maps_flutter/google_maps_flutter_android}, google_maps_flutter_ios: {path: ../../../packages/google_maps_flutter/google_maps_flutter_ios}, google_maps_flutter_platform_interface: {path: ../../../packages/google_maps_flutter/google_maps_flutter_platform_interface}, google_maps_flutter_web: {path: ../../../packages/google_maps_flutter/google_maps_flutter_web}} diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java index 5701825f12d..7e590e07113 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java @@ -61,17 +61,55 @@ class Convert { public static final String HEATMAP_GRADIENT_COLOR_MAP_SIZE_KEY = "colorMapSize"; private static BitmapDescriptor toBitmapDescriptor( - Messages.PlatformBitmap platformBitmap, AssetManager assetManager, float density) { + Messages.PlatformBitmap platformBitmap, AssetManager assetManager, float density, + ImageRegistry imageRegistry) { return toBitmapDescriptor( - platformBitmap, assetManager, density, new BitmapDescriptorFactoryWrapper()); + platformBitmap, assetManager, density, new BitmapDescriptorFactoryWrapper(), + imageRegistry); } - private static BitmapDescriptor toBitmapDescriptor( + public static BitmapDescriptor createBitmapDescriptor( Messages.PlatformBitmap platformBitmap, AssetManager assetManager, float density, BitmapDescriptorFactoryWrapper wrapper) { Object bitmap = platformBitmap.getBitmap(); + + if (bitmap instanceof Messages.PlatformBitmapAsset) { + Messages.PlatformBitmapAsset typedBitmap = (Messages.PlatformBitmapAsset) bitmap; + final String assetPath = typedBitmap.getName(); + final String assetPackage = typedBitmap.getPkg(); + if (assetPackage == null) { + return BitmapDescriptorFactory.fromAsset( + FlutterInjector.instance().flutterLoader().getLookupKeyForAsset(assetPath)); + } else { + return BitmapDescriptorFactory.fromAsset( + FlutterInjector.instance() + .flutterLoader() + .getLookupKeyForAsset(assetPath, assetPackage)); + } + } + if (bitmap instanceof Messages.PlatformBitmapAssetMap) { + Messages.PlatformBitmapAssetMap typedBitmap = (Messages.PlatformBitmapAssetMap) bitmap; + return getBitmapFromAsset( + typedBitmap, assetManager, density, wrapper, new FlutterInjectorWrapper()); + } + if (bitmap instanceof Messages.PlatformBitmapBytesMap) { + Messages.PlatformBitmapBytesMap typedBitmap = (Messages.PlatformBitmapBytesMap) bitmap; + return getBitmapFromBytes(typedBitmap, density, wrapper); + } + // TODO support for legacy Messages.PlatformBitmapAssetImage and Messages.PlatformBitmapBytes + + throw new IllegalArgumentException("PlatformBitmap did not contain a supported subtype."); + } + + private static BitmapDescriptor toBitmapDescriptor( + Messages.PlatformBitmap platformBitmap, + AssetManager assetManager, + float density, + BitmapDescriptorFactoryWrapper wrapper, + ImageRegistry imageRegistry) { + Object bitmap = platformBitmap.getBitmap(); if (bitmap instanceof Messages.PlatformBitmapDefaultMarker) { Messages.PlatformBitmapDefaultMarker typedBitmap = (Messages.PlatformBitmapDefaultMarker) bitmap; @@ -115,6 +153,11 @@ private static BitmapDescriptor toBitmapDescriptor( Messages.PlatformBitmapBytesMap typedBitmap = (Messages.PlatformBitmapBytesMap) bitmap; return getBitmapFromBytes(typedBitmap, density, wrapper); } + if (bitmap instanceof Messages.PlatformBitmapRegisteredMapBitmap) { + Messages.PlatformBitmapRegisteredMapBitmap typedBitmap = + (Messages.PlatformBitmapRegisteredMapBitmap) bitmap; + return getBitmapFromRegisteredBitmap(imageRegistry, typedBitmap); + } throw new IllegalArgumentException("PlatformBitmap did not contain a supported subtype."); } @@ -185,6 +228,12 @@ public static BitmapDescriptor getBitmapFromBytes( } } + public static BitmapDescriptor getBitmapFromRegisteredBitmap( + ImageRegistry imageRegistry, + Messages.PlatformBitmapRegisteredMapBitmap registeredBitmap) { + return imageRegistry.getBitmap(registeredBitmap.getId()); + } + /** * Creates a BitmapDescriptor object from asset, using given details and density. * @@ -588,13 +637,15 @@ static void interpretMarkerOptions( MarkerOptionsSink sink, AssetManager assetManager, float density, - BitmapDescriptorFactoryWrapper wrapper) { + BitmapDescriptorFactoryWrapper wrapper, + ImageRegistry imageRegistry) { sink.setAlpha(marker.getAlpha().floatValue()); sink.setAnchor(marker.getAnchor().getX().floatValue(), marker.getAnchor().getY().floatValue()); sink.setConsumeTapEvents(marker.getConsumeTapEvents()); sink.setDraggable(marker.getDraggable()); sink.setFlat(marker.getFlat()); - sink.setIcon(toBitmapDescriptor(marker.getIcon(), assetManager, density, wrapper)); + sink.setIcon(toBitmapDescriptor(marker.getIcon(), assetManager, density, wrapper, + imageRegistry)); interpretInfoWindowOptions(sink, marker.getInfoWindow()); sink.setPosition(toLatLng(marker.getPosition().toList())); sink.setRotation(marker.getRotation().floatValue()); @@ -642,11 +693,12 @@ static String interpretPolylineOptions( Messages.PlatformPolyline polyline, PolylineOptionsSink sink, AssetManager assetManager, + ImageRegistry imageRegistry, float density) { sink.setConsumeTapEvents(polyline.getConsumesTapEvents()); sink.setColor(polyline.getColor().intValue()); - sink.setEndCap(capFromPigeon(polyline.getEndCap(), assetManager, density)); - sink.setStartCap(capFromPigeon(polyline.getStartCap(), assetManager, density)); + sink.setEndCap(capFromPigeon(polyline.getEndCap(), assetManager, imageRegistry, density)); + sink.setStartCap(capFromPigeon(polyline.getStartCap(), assetManager, imageRegistry, density)); sink.setGeodesic(polyline.getGeodesic()); sink.setJointType(jointTypeFromPigeon(polyline.getJointType())); sink.setVisible(polyline.getVisible()); @@ -817,7 +869,8 @@ private static List patternFromPigeon( } private static Cap capFromPigeon( - Messages.PlatformCap cap, AssetManager assetManager, float density) { + Messages.PlatformCap cap, AssetManager assetManager, ImageRegistry imageRegistry, + float density) { switch (cap.getType()) { case BUTT_CAP: return new ButtCap(); @@ -830,7 +883,7 @@ private static Cap capFromPigeon( throw new IllegalArgumentException("A Custom Cap must specify a refWidth value."); } return new CustomCap( - toBitmapDescriptor(cap.getBitmapDescriptor(), assetManager, density), + toBitmapDescriptor(cap.getBitmapDescriptor(), assetManager, density, imageRegistry), cap.getRefWidth().floatValue()); } throw new IllegalArgumentException("Unrecognized PlatformCap type: " + cap.getType()); diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapBuilder.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapBuilder.java index c7abcb2ff94..4d82162dc64 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapBuilder.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapBuilder.java @@ -36,9 +36,11 @@ GoogleMapController build( int id, Context context, BinaryMessenger binaryMessenger, - LifecycleProvider lifecycleProvider) { + LifecycleProvider lifecycleProvider, + ImageRegistry imageRegistry) { final GoogleMapController controller = - new GoogleMapController(id, context, binaryMessenger, lifecycleProvider, options); + new GoogleMapController(id, context, binaryMessenger, lifecycleProvider, options, + imageRegistry); controller.init(); controller.setMyLocationEnabled(myLocationEnabled); controller.setMyLocationButtonEnabled(myLocationButtonEnabled); diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java index 140938ea047..473313da55e 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java @@ -106,13 +106,15 @@ class GoogleMapController private @Nullable String initialMapStyle; private boolean lastSetStyleSucceeded; @VisibleForTesting List initialPadding; + private final ImageRegistry imageRegistry; GoogleMapController( int id, Context context, BinaryMessenger binaryMessenger, LifecycleProvider lifecycleProvider, - GoogleMapOptions options) { + GoogleMapOptions options, + ImageRegistry imageRegistry) { this.id = id; this.context = context; this.options = options; @@ -131,12 +133,15 @@ class GoogleMapController clusterManagersController, assetManager, density, - new Convert.BitmapDescriptorFactoryWrapper()); + new Convert.BitmapDescriptorFactoryWrapper(), + imageRegistry); this.polygonsController = new PolygonsController(flutterApi, density); - this.polylinesController = new PolylinesController(flutterApi, assetManager, density); + this.polylinesController = new PolylinesController(flutterApi, assetManager, imageRegistry, + density); this.circlesController = new CirclesController(flutterApi, density); this.heatmapsController = new HeatmapsController(); this.tileOverlaysController = new TileOverlaysController(flutterApi); + this.imageRegistry = imageRegistry; } // Constructor for testing purposes only @@ -154,7 +159,8 @@ class GoogleMapController PolylinesController polylinesController, CirclesController circlesController, HeatmapsController heatmapController, - TileOverlaysController tileOverlaysController) { + TileOverlaysController tileOverlaysController, + ImageRegistry imageRegistry) { this.id = id; this.context = context; this.binaryMessenger = binaryMessenger; @@ -170,6 +176,7 @@ class GoogleMapController this.circlesController = circlesController; this.heatmapsController = heatmapController; this.tileOverlaysController = tileOverlaysController; + this.imageRegistry = imageRegistry; } @Override diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapFactory.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapFactory.java index c1a3496e7f4..405b258a654 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapFactory.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapFactory.java @@ -18,14 +18,17 @@ public class GoogleMapFactory extends PlatformViewFactory { private final BinaryMessenger binaryMessenger; private final LifecycleProvider lifecycleProvider; private final GoogleMapInitializer googleMapInitializer; + private final ImageRegistry imageRegistry; GoogleMapFactory( - BinaryMessenger binaryMessenger, Context context, LifecycleProvider lifecycleProvider) { + BinaryMessenger binaryMessenger, Context context, LifecycleProvider lifecycleProvider, + ImageRegistry imageRegistry) { super(Messages.MapsApi.getCodec()); this.binaryMessenger = binaryMessenger; this.lifecycleProvider = lifecycleProvider; this.googleMapInitializer = new GoogleMapInitializer(context, binaryMessenger); + this.imageRegistry = imageRegistry; } @Override @@ -52,6 +55,6 @@ public PlatformView create(@NonNull Context context, int id, @Nullable Object ar builder.setMapId(cloudMapId); } - return builder.build(id, context, binaryMessenger, lifecycleProvider); + return builder.build(id, context, binaryMessenger, lifecycleProvider, imageRegistry); } } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapsPlugin.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapsPlugin.java index 36b20cfe909..cb1912d119f 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapsPlugin.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapsPlugin.java @@ -17,6 +17,7 @@ import io.flutter.embedding.engine.plugins.activity.ActivityAware; import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding; import io.flutter.embedding.engine.plugins.lifecycle.FlutterLifecycleAdapter; +import io.flutter.plugins.googlemaps.Messages.ImageRegistryApi; /** * Plugin for controlling a set of GoogleMap views to be shown as overlays on top of the Flutter @@ -36,6 +37,9 @@ public GoogleMapsPlugin() {} @Override public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) { + final ImageRegistry imageRegistry = new ImageRegistry(binding.getApplicationContext()); + ImageRegistryApi.setUp(binding.getBinaryMessenger(), imageRegistry); + binding .getPlatformViewRegistry() .registerViewFactory( @@ -49,11 +53,15 @@ public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) { public Lifecycle getLifecycle() { return lifecycle; } - })); + }, + imageRegistry + )); } @Override - public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {} + public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { + ImageRegistryApi.setUp(binding.getBinaryMessenger(), null); + } // ActivityAware diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java new file mode 100644 index 00000000000..9b7275df20a --- /dev/null +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java @@ -0,0 +1,43 @@ +package io.flutter.plugins.googlemaps; + +import android.content.Context; +import android.content.res.AssetManager; +import io.flutter.plugins.googlemaps.Messages.ImageRegistryApi; +import io.flutter.plugins.googlemaps.Messages.PlatformBitmap; +import com.google.android.gms.maps.model.BitmapDescriptor; +import java.util.HashMap; + +class ImageRegistry implements ImageRegistryApi { + final Context context; + final AssetManager assetManager; + final float density; + + private final HashMap registry = new HashMap<>(); + + ImageRegistry(Context context) { + this.context = context; + this.assetManager = context.getAssets(); + this.density = context.getResources().getDisplayMetrics().density; + } + + @Override + public void addBitmapToCache(Long id, PlatformBitmap bitmap) { + final BitmapDescriptor bitmapDescriptor = Convert.createBitmapDescriptor(bitmap, assetManager, + density, new Convert.BitmapDescriptorFactoryWrapper()); + registry.put(id, bitmapDescriptor); + } + + @Override + public void removeBitmapFromCache(Long id) { + registry.remove(id); + } + + @Override + public void clearBitmapCache() { + registry.clear(); + } + + public BitmapDescriptor getBitmap(Long id) { + return registry.get(id); + } +} diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/MarkersController.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/MarkersController.java index 24326fe5305..584b1191c72 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/MarkersController.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/MarkersController.java @@ -25,13 +25,15 @@ class MarkersController { private final AssetManager assetManager; private final float density; private final Convert.BitmapDescriptorFactoryWrapper bitmapDescriptorFactoryWrapper; + private final ImageRegistry imageRegistry; MarkersController( @NonNull MapsCallbackApi flutterApi, ClusterManagersController clusterManagersController, AssetManager assetManager, float density, - Convert.BitmapDescriptorFactoryWrapper bitmapDescriptorFactoryWrapper) { + Convert.BitmapDescriptorFactoryWrapper bitmapDescriptorFactoryWrapper, + ImageRegistry imageRegistry) { this.markerIdToMarkerBuilder = new HashMap<>(); this.markerIdToController = new HashMap<>(); this.googleMapsMarkerIdToDartMarkerId = new HashMap<>(); @@ -40,6 +42,7 @@ class MarkersController { this.assetManager = assetManager; this.density = density; this.bitmapDescriptorFactoryWrapper = bitmapDescriptorFactoryWrapper; + this.imageRegistry = imageRegistry; } void setCollection(MarkerManager.Collection markerCollection) { @@ -176,7 +179,8 @@ private void addMarker(@NonNull Messages.PlatformMarker marker) { String clusterManagerId = marker.getClusterManagerId(); MarkerBuilder markerBuilder = new MarkerBuilder(markerId, clusterManagerId); Convert.interpretMarkerOptions( - marker, markerBuilder, assetManager, density, bitmapDescriptorFactoryWrapper); + marker, markerBuilder, assetManager, density, bitmapDescriptorFactoryWrapper, + imageRegistry); addMarker(markerBuilder); } @@ -233,13 +237,15 @@ private void changeMarker(@NonNull Messages.PlatformMarker marker) { // Update marker builder. Convert.interpretMarkerOptions( - marker, markerBuilder, assetManager, density, bitmapDescriptorFactoryWrapper); + marker, markerBuilder, assetManager, density, bitmapDescriptorFactoryWrapper, + imageRegistry); // Update existing marker on map. MarkerController markerController = markerIdToController.get(markerId); if (markerController != null) { Convert.interpretMarkerOptions( - marker, markerController, assetManager, density, bitmapDescriptorFactoryWrapper); + marker, markerController, assetManager, density, bitmapDescriptorFactoryWrapper, + imageRegistry); } } } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Messages.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Messages.java index 4a9afeed6d0..b314c3837f4 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Messages.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Messages.java @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v22.6.0), do not edit directly. +// Autogenerated from Pigeon (v22.7.2), do not edit directly. // See also: https://pub.dev/packages/pigeon package io.flutter.plugins.googlemaps; @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -40,7 +41,8 @@ public static class FlutterError extends RuntimeException { /** The error details. Must be a datatype supported by the api codec. */ public final Object details; - public FlutterError(@NonNull String code, @Nullable String message, @Nullable Object details) { + public FlutterError(@NonNull String code, @Nullable String message, @Nullable Object details) + { super(message); this.code = code; this.details = details; @@ -59,15 +61,14 @@ protected static ArrayList wrapError(@NonNull Throwable exception) { errorList.add(exception.toString()); errorList.add(exception.getClass().getSimpleName()); errorList.add( - "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); + "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); } return errorList; } @NonNull protected static FlutterError createConnectionError(@NonNull String channelName) { - return new FlutterError( - "channel-error", "Unable to establish connection on channel: " + channelName + ".", ""); + return new FlutterError("channel-error", "Unable to establish connection on channel: " + channelName + ".", ""); } @Target(METHOD) @@ -114,9 +115,9 @@ public enum PlatformJointType { } /** - * Enumeration of possible types of PlatformCap, corresponding to the subclasses of Cap in the - * Google Maps Android SDK. See - * https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/Cap. + * Enumeration of possible types of PlatformCap, corresponding to the + * subclasses of Cap in the Google Maps Android SDK. + * See https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/Cap. */ public enum PlatformCapType { BUTT_CAP(0), @@ -159,7 +160,7 @@ public enum PlatformMapBitmapScaling { /** * Pigeon representatation of a CameraPosition. * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCameraPosition { private @NonNull Double bearing; @@ -219,17 +220,10 @@ public void setZoom(@NonNull Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformCameraPosition that = (PlatformCameraPosition) o; - return bearing.equals(that.bearing) - && target.equals(that.target) - && tilt.equals(that.tilt) - && zoom.equals(that.zoom); + return bearing.equals(that.bearing) && target.equals(that.target) && tilt.equals(that.tilt) && zoom.equals(that.zoom); } @Override @@ -308,14 +302,16 @@ ArrayList toList() { /** * Pigeon representation of a CameraUpdate. * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCameraUpdate { /** - * This Object shall be any of the below classes prefixed with PlatformCameraUpdate. Each such - * class represents a different type of camera update, and each holds a different set of data, - * preventing the use of a single unified class. Pigeon does not support inheritance, which - * prevents a more strict type bound. See https://github.com/flutter/flutter/issues/117819. + * This Object shall be any of the below classes prefixed with + * PlatformCameraUpdate. Each such class represents a different type of + * camera update, and each holds a different set of data, preventing the + * use of a single unified class. Pigeon does not support inheritance, which + * prevents a more strict type bound. + * See https://github.com/flutter/flutter/issues/117819. */ private @NonNull Object cameraUpdate; @@ -335,12 +331,8 @@ public void setCameraUpdate(@NonNull Object setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformCameraUpdate that = (PlatformCameraUpdate) o; return cameraUpdate.equals(that.cameraUpdate); } @@ -385,7 +377,7 @@ ArrayList toList() { /** * Pigeon equivalent of NewCameraPosition * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCameraUpdateNewCameraPosition { private @NonNull PlatformCameraPosition cameraPosition; @@ -406,12 +398,8 @@ public void setCameraPosition(@NonNull PlatformCameraPosition setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformCameraUpdateNewCameraPosition that = (PlatformCameraUpdateNewCameraPosition) o; return cameraPosition.equals(that.cameraPosition); } @@ -432,8 +420,7 @@ public static final class Builder { } public @NonNull PlatformCameraUpdateNewCameraPosition build() { - PlatformCameraUpdateNewCameraPosition pigeonReturn = - new PlatformCameraUpdateNewCameraPosition(); + PlatformCameraUpdateNewCameraPosition pigeonReturn = new PlatformCameraUpdateNewCameraPosition(); pigeonReturn.setCameraPosition(cameraPosition); return pigeonReturn; } @@ -446,10 +433,8 @@ ArrayList toList() { return toListResult; } - static @NonNull PlatformCameraUpdateNewCameraPosition fromList( - @NonNull ArrayList pigeonVar_list) { - PlatformCameraUpdateNewCameraPosition pigeonResult = - new PlatformCameraUpdateNewCameraPosition(); + static @NonNull PlatformCameraUpdateNewCameraPosition fromList(@NonNull ArrayList pigeonVar_list) { + PlatformCameraUpdateNewCameraPosition pigeonResult = new PlatformCameraUpdateNewCameraPosition(); Object cameraPosition = pigeonVar_list.get(0); pigeonResult.setCameraPosition((PlatformCameraPosition) cameraPosition); return pigeonResult; @@ -459,7 +444,7 @@ ArrayList toList() { /** * Pigeon equivalent of NewLatLng * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCameraUpdateNewLatLng { private @NonNull PlatformLatLng latLng; @@ -480,12 +465,8 @@ public void setLatLng(@NonNull PlatformLatLng setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformCameraUpdateNewLatLng that = (PlatformCameraUpdateNewLatLng) o; return latLng.equals(that.latLng); } @@ -519,8 +500,7 @@ ArrayList toList() { return toListResult; } - static @NonNull PlatformCameraUpdateNewLatLng fromList( - @NonNull ArrayList pigeonVar_list) { + static @NonNull PlatformCameraUpdateNewLatLng fromList(@NonNull ArrayList pigeonVar_list) { PlatformCameraUpdateNewLatLng pigeonResult = new PlatformCameraUpdateNewLatLng(); Object latLng = pigeonVar_list.get(0); pigeonResult.setLatLng((PlatformLatLng) latLng); @@ -531,7 +511,7 @@ ArrayList toList() { /** * Pigeon equivalent of NewLatLngBounds * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCameraUpdateNewLatLngBounds { private @NonNull PlatformLatLngBounds bounds; @@ -565,12 +545,8 @@ public void setPadding(@NonNull Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformCameraUpdateNewLatLngBounds that = (PlatformCameraUpdateNewLatLngBounds) o; return bounds.equals(that.bounds) && padding.equals(that.padding); } @@ -599,8 +575,7 @@ public static final class Builder { } public @NonNull PlatformCameraUpdateNewLatLngBounds build() { - PlatformCameraUpdateNewLatLngBounds pigeonReturn = - new PlatformCameraUpdateNewLatLngBounds(); + PlatformCameraUpdateNewLatLngBounds pigeonReturn = new PlatformCameraUpdateNewLatLngBounds(); pigeonReturn.setBounds(bounds); pigeonReturn.setPadding(padding); return pigeonReturn; @@ -615,8 +590,7 @@ ArrayList toList() { return toListResult; } - static @NonNull PlatformCameraUpdateNewLatLngBounds fromList( - @NonNull ArrayList pigeonVar_list) { + static @NonNull PlatformCameraUpdateNewLatLngBounds fromList(@NonNull ArrayList pigeonVar_list) { PlatformCameraUpdateNewLatLngBounds pigeonResult = new PlatformCameraUpdateNewLatLngBounds(); Object bounds = pigeonVar_list.get(0); pigeonResult.setBounds((PlatformLatLngBounds) bounds); @@ -629,7 +603,7 @@ ArrayList toList() { /** * Pigeon equivalent of NewLatLngZoom * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCameraUpdateNewLatLngZoom { private @NonNull PlatformLatLng latLng; @@ -663,12 +637,8 @@ public void setZoom(@NonNull Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformCameraUpdateNewLatLngZoom that = (PlatformCameraUpdateNewLatLngZoom) o; return latLng.equals(that.latLng) && zoom.equals(that.zoom); } @@ -712,8 +682,7 @@ ArrayList toList() { return toListResult; } - static @NonNull PlatformCameraUpdateNewLatLngZoom fromList( - @NonNull ArrayList pigeonVar_list) { + static @NonNull PlatformCameraUpdateNewLatLngZoom fromList(@NonNull ArrayList pigeonVar_list) { PlatformCameraUpdateNewLatLngZoom pigeonResult = new PlatformCameraUpdateNewLatLngZoom(); Object latLng = pigeonVar_list.get(0); pigeonResult.setLatLng((PlatformLatLng) latLng); @@ -726,7 +695,7 @@ ArrayList toList() { /** * Pigeon equivalent of ScrollBy * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCameraUpdateScrollBy { private @NonNull Double dx; @@ -760,12 +729,8 @@ public void setDy(@NonNull Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformCameraUpdateScrollBy that = (PlatformCameraUpdateScrollBy) o; return dx.equals(that.dx) && dy.equals(that.dy); } @@ -809,8 +774,7 @@ ArrayList toList() { return toListResult; } - static @NonNull PlatformCameraUpdateScrollBy fromList( - @NonNull ArrayList pigeonVar_list) { + static @NonNull PlatformCameraUpdateScrollBy fromList(@NonNull ArrayList pigeonVar_list) { PlatformCameraUpdateScrollBy pigeonResult = new PlatformCameraUpdateScrollBy(); Object dx = pigeonVar_list.get(0); pigeonResult.setDx((Double) dx); @@ -823,7 +787,7 @@ ArrayList toList() { /** * Pigeon equivalent of ZoomBy * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCameraUpdateZoomBy { private @NonNull Double amount; @@ -854,12 +818,8 @@ public void setFocus(@Nullable PlatformDoublePair setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformCameraUpdateZoomBy that = (PlatformCameraUpdateZoomBy) o; return amount.equals(that.amount) && Objects.equals(focus, that.focus); } @@ -916,7 +876,7 @@ ArrayList toList() { /** * Pigeon equivalent of ZoomIn/ZoomOut * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCameraUpdateZoom { private @NonNull Boolean out; @@ -937,12 +897,8 @@ public void setOut(@NonNull Boolean setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformCameraUpdateZoom that = (PlatformCameraUpdateZoom) o; return out.equals(that.out); } @@ -987,7 +943,7 @@ ArrayList toList() { /** * Pigeon equivalent of ZoomTo * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCameraUpdateZoomTo { private @NonNull Double zoom; @@ -1008,12 +964,8 @@ public void setZoom(@NonNull Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformCameraUpdateZoomTo that = (PlatformCameraUpdateZoomTo) o; return zoom.equals(that.zoom); } @@ -1058,7 +1010,7 @@ ArrayList toList() { /** * Pigeon equivalent of the Circle class. * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCircle { private @NonNull Boolean consumeTapEvents; @@ -1183,36 +1135,15 @@ public void setCircleId(@NonNull String setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformCircle that = (PlatformCircle) o; - return consumeTapEvents.equals(that.consumeTapEvents) - && fillColor.equals(that.fillColor) - && strokeColor.equals(that.strokeColor) - && visible.equals(that.visible) - && strokeWidth.equals(that.strokeWidth) - && zIndex.equals(that.zIndex) - && center.equals(that.center) - && radius.equals(that.radius) - && circleId.equals(that.circleId); + return consumeTapEvents.equals(that.consumeTapEvents) && fillColor.equals(that.fillColor) && strokeColor.equals(that.strokeColor) && visible.equals(that.visible) && strokeWidth.equals(that.strokeWidth) && zIndex.equals(that.zIndex) && center.equals(that.center) && radius.equals(that.radius) && circleId.equals(that.circleId); } @Override public int hashCode() { - return Objects.hash( - consumeTapEvents, - fillColor, - strokeColor, - visible, - strokeWidth, - zIndex, - center, - radius, - circleId); + return Objects.hash(consumeTapEvents, fillColor, strokeColor, visible, strokeWidth, zIndex, center, radius, circleId); } public static final class Builder { @@ -1346,12 +1277,13 @@ ArrayList toList() { /** * Pigeon equivalent of the Heatmap class. * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformHeatmap { /** - * The heatmap data, as JSON. This should only be set from Heatmap.toJson, and the native code - * must interpret it according to the internal implementation details of that method. + * The heatmap data, as JSON. This should only be set from + * Heatmap.toJson, and the native code must interpret it according to the + * internal implementation details of that method. */ private @NonNull Map json; @@ -1371,12 +1303,8 @@ public void setJson(@NonNull Map setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformHeatmap that = (PlatformHeatmap) o; return json.equals(that.json); } @@ -1421,7 +1349,7 @@ ArrayList toList() { /** * Pigeon equivalent of the ClusterManager class. * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformClusterManager { private @NonNull String identifier; @@ -1442,12 +1370,8 @@ public void setIdentifier(@NonNull String setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformClusterManager that = (PlatformClusterManager) o; return identifier.equals(that.identifier); } @@ -1492,7 +1416,7 @@ ArrayList toList() { /** * Pair of double values, such as for an offset or size. * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformDoublePair { private @NonNull Double x; @@ -1526,12 +1450,8 @@ public void setY(@NonNull Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformDoublePair that = (PlatformDoublePair) o; return x.equals(that.x) && y.equals(that.y); } @@ -1588,7 +1508,7 @@ ArrayList toList() { /** * Pigeon equivalent of the InfoWindow class. * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformInfoWindow { private @Nullable String title; @@ -1629,16 +1549,10 @@ public void setAnchor(@NonNull PlatformDoublePair setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformInfoWindow that = (PlatformInfoWindow) o; - return Objects.equals(title, that.title) - && Objects.equals(snippet, that.snippet) - && anchor.equals(that.anchor); + return Objects.equals(title, that.title) && Objects.equals(snippet, that.snippet) && anchor.equals(that.anchor); } @Override @@ -1705,7 +1619,7 @@ ArrayList toList() { /** * Pigeon equivalent of the Marker class. * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformMarker { private @NonNull Double alpha; @@ -1879,44 +1793,15 @@ public void setClusterManagerId(@Nullable String setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformMarker that = (PlatformMarker) o; - return alpha.equals(that.alpha) - && anchor.equals(that.anchor) - && consumeTapEvents.equals(that.consumeTapEvents) - && draggable.equals(that.draggable) - && flat.equals(that.flat) - && icon.equals(that.icon) - && infoWindow.equals(that.infoWindow) - && position.equals(that.position) - && rotation.equals(that.rotation) - && visible.equals(that.visible) - && zIndex.equals(that.zIndex) - && markerId.equals(that.markerId) - && Objects.equals(clusterManagerId, that.clusterManagerId); + return alpha.equals(that.alpha) && anchor.equals(that.anchor) && consumeTapEvents.equals(that.consumeTapEvents) && draggable.equals(that.draggable) && flat.equals(that.flat) && icon.equals(that.icon) && infoWindow.equals(that.infoWindow) && position.equals(that.position) && rotation.equals(that.rotation) && visible.equals(that.visible) && zIndex.equals(that.zIndex) && markerId.equals(that.markerId) && Objects.equals(clusterManagerId, that.clusterManagerId); } @Override public int hashCode() { - return Objects.hash( - alpha, - anchor, - consumeTapEvents, - draggable, - flat, - icon, - infoWindow, - position, - rotation, - visible, - zIndex, - markerId, - clusterManagerId); + return Objects.hash(alpha, anchor, consumeTapEvents, draggable, flat, icon, infoWindow, position, rotation, visible, zIndex, markerId, clusterManagerId); } public static final class Builder { @@ -2098,7 +1983,7 @@ ArrayList toList() { /** * Pigeon equivalent of the Polygon class. * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformPolygon { private @NonNull String polygonId; @@ -2236,38 +2121,15 @@ public void setZIndex(@NonNull Long setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformPolygon that = (PlatformPolygon) o; - return polygonId.equals(that.polygonId) - && consumesTapEvents.equals(that.consumesTapEvents) - && fillColor.equals(that.fillColor) - && geodesic.equals(that.geodesic) - && points.equals(that.points) - && holes.equals(that.holes) - && visible.equals(that.visible) - && strokeColor.equals(that.strokeColor) - && strokeWidth.equals(that.strokeWidth) - && zIndex.equals(that.zIndex); + return polygonId.equals(that.polygonId) && consumesTapEvents.equals(that.consumesTapEvents) && fillColor.equals(that.fillColor) && geodesic.equals(that.geodesic) && points.equals(that.points) && holes.equals(that.holes) && visible.equals(that.visible) && strokeColor.equals(that.strokeColor) && strokeWidth.equals(that.strokeWidth) && zIndex.equals(that.zIndex); } @Override public int hashCode() { - return Objects.hash( - polygonId, - consumesTapEvents, - fillColor, - geodesic, - points, - holes, - visible, - strokeColor, - strokeWidth, - zIndex); + return Objects.hash(polygonId, consumesTapEvents, fillColor, geodesic, points, holes, visible, strokeColor, strokeWidth, zIndex); } public static final class Builder { @@ -2413,7 +2275,7 @@ ArrayList toList() { /** * Pigeon equivalent of the Polyline class. * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformPolyline { private @NonNull String polylineId; @@ -2510,8 +2372,8 @@ public void setPoints(@NonNull List setterArg) { } /** - * The cap at the start and end vertex of a polyline. See - * https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/Cap. + * The cap at the start and end vertex of a polyline. + * See https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/Cap. */ private @NonNull PlatformCap startCap; @@ -2583,42 +2445,15 @@ public void setZIndex(@NonNull Long setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformPolyline that = (PlatformPolyline) o; - return polylineId.equals(that.polylineId) - && consumesTapEvents.equals(that.consumesTapEvents) - && color.equals(that.color) - && geodesic.equals(that.geodesic) - && jointType.equals(that.jointType) - && patterns.equals(that.patterns) - && points.equals(that.points) - && startCap.equals(that.startCap) - && endCap.equals(that.endCap) - && visible.equals(that.visible) - && width.equals(that.width) - && zIndex.equals(that.zIndex); + return polylineId.equals(that.polylineId) && consumesTapEvents.equals(that.consumesTapEvents) && color.equals(that.color) && geodesic.equals(that.geodesic) && jointType.equals(that.jointType) && patterns.equals(that.patterns) && points.equals(that.points) && startCap.equals(that.startCap) && endCap.equals(that.endCap) && visible.equals(that.visible) && width.equals(that.width) && zIndex.equals(that.zIndex); } @Override public int hashCode() { - return Objects.hash( - polylineId, - consumesTapEvents, - color, - geodesic, - jointType, - patterns, - points, - startCap, - endCap, - visible, - width, - zIndex); + return Objects.hash(polylineId, consumesTapEvents, color, geodesic, jointType, patterns, points, startCap, endCap, visible, width, zIndex); } public static final class Builder { @@ -2789,7 +2624,7 @@ ArrayList toList() { * Pigeon equivalent of Cap from the platform interface. * https://github.com/flutter/packages/blob/main/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/cap.dart * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCap { private @NonNull PlatformCapType type; @@ -2830,16 +2665,10 @@ public void setRefWidth(@Nullable Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformCap that = (PlatformCap) o; - return type.equals(that.type) - && Objects.equals(bitmapDescriptor, that.bitmapDescriptor) - && Objects.equals(refWidth, that.refWidth); + return type.equals(that.type) && Objects.equals(bitmapDescriptor, that.bitmapDescriptor) && Objects.equals(refWidth, that.refWidth); } @Override @@ -2906,7 +2735,7 @@ ArrayList toList() { /** * Pigeon equivalent of the PatternItem class. * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformPatternItem { private @NonNull PlatformPatternItemType type; @@ -2937,12 +2766,8 @@ public void setLength(@Nullable Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformPatternItem that = (PlatformPatternItem) o; return type.equals(that.type) && Objects.equals(length, that.length); } @@ -2999,7 +2824,7 @@ ArrayList toList() { /** * Pigeon equivalent of the Tile class. * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformTile { private @NonNull Long width; @@ -3043,16 +2868,10 @@ public void setData(@Nullable byte[] setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformTile that = (PlatformTile) o; - return width.equals(that.width) - && height.equals(that.height) - && Arrays.equals(data, that.data); + return width.equals(that.width) && height.equals(that.height) && Arrays.equals(data, that.data); } @Override @@ -3121,7 +2940,7 @@ ArrayList toList() { /** * Pigeon equivalent of the TileOverlay class. * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformTileOverlay { private @NonNull String tileOverlayId; @@ -3207,19 +3026,10 @@ public void setTileSize(@NonNull Long setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformTileOverlay that = (PlatformTileOverlay) o; - return tileOverlayId.equals(that.tileOverlayId) - && fadeIn.equals(that.fadeIn) - && transparency.equals(that.transparency) - && zIndex.equals(that.zIndex) - && visible.equals(that.visible) - && tileSize.equals(that.tileSize); + return tileOverlayId.equals(that.tileOverlayId) && fadeIn.equals(that.fadeIn) && transparency.equals(that.transparency) && zIndex.equals(that.zIndex) && visible.equals(that.visible) && tileSize.equals(that.tileSize); } @Override @@ -3322,7 +3132,7 @@ ArrayList toList() { /** * Pigeon equivalent of Flutter's EdgeInsets. * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformEdgeInsets { private @NonNull Double top; @@ -3382,17 +3192,10 @@ public void setRight(@NonNull Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformEdgeInsets that = (PlatformEdgeInsets) o; - return top.equals(that.top) - && bottom.equals(that.bottom) - && left.equals(that.left) - && right.equals(that.right); + return top.equals(that.top) && bottom.equals(that.bottom) && left.equals(that.left) && right.equals(that.right); } @Override @@ -3471,7 +3274,7 @@ ArrayList toList() { /** * Pigeon equivalent of LatLng. * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformLatLng { private @NonNull Double latitude; @@ -3505,12 +3308,8 @@ public void setLongitude(@NonNull Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformLatLng that = (PlatformLatLng) o; return latitude.equals(that.latitude) && longitude.equals(that.longitude); } @@ -3567,7 +3366,7 @@ ArrayList toList() { /** * Pigeon equivalent of LatLngBounds. * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformLatLngBounds { private @NonNull PlatformLatLng northeast; @@ -3601,12 +3400,8 @@ public void setSouthwest(@NonNull PlatformLatLng setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformLatLngBounds that = (PlatformLatLngBounds) o; return northeast.equals(that.northeast) && southwest.equals(that.southwest); } @@ -3663,7 +3458,7 @@ ArrayList toList() { /** * Pigeon equivalent of Cluster. * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCluster { private @NonNull String clusterManagerId; @@ -3723,17 +3518,10 @@ public void setMarkerIds(@NonNull List setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformCluster that = (PlatformCluster) o; - return clusterManagerId.equals(that.clusterManagerId) - && position.equals(that.position) - && bounds.equals(that.bounds) - && markerIds.equals(that.markerIds); + return clusterManagerId.equals(that.clusterManagerId) && position.equals(that.position) && bounds.equals(that.bounds) && markerIds.equals(that.markerIds); } @Override @@ -3812,10 +3600,10 @@ ArrayList toList() { /** * Pigeon equivalent of CameraTargetBounds. * - *

As with the Dart version, it exists to distinguish between not setting a a target, and - * having an explicitly unbounded target (null [bounds]). + * As with the Dart version, it exists to distinguish between not setting a + * a target, and having an explicitly unbounded target (null [bounds]). * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCameraTargetBounds { private @Nullable PlatformLatLngBounds bounds; @@ -3830,12 +3618,8 @@ public void setBounds(@Nullable PlatformLatLngBounds setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformCameraTargetBounds that = (PlatformCameraTargetBounds) o; return Objects.equals(bounds, that.bounds); } @@ -3880,7 +3664,7 @@ ArrayList toList() { /** * Information passed to the platform view creation. * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformMapViewCreationParams { private @NonNull PlatformCameraPosition initialCameraPosition; @@ -4005,36 +3789,15 @@ public void setInitialClusterManagers(@NonNull List sett @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformMapViewCreationParams that = (PlatformMapViewCreationParams) o; - return initialCameraPosition.equals(that.initialCameraPosition) - && mapConfiguration.equals(that.mapConfiguration) - && initialCircles.equals(that.initialCircles) - && initialMarkers.equals(that.initialMarkers) - && initialPolygons.equals(that.initialPolygons) - && initialPolylines.equals(that.initialPolylines) - && initialHeatmaps.equals(that.initialHeatmaps) - && initialTileOverlays.equals(that.initialTileOverlays) - && initialClusterManagers.equals(that.initialClusterManagers); + return initialCameraPosition.equals(that.initialCameraPosition) && mapConfiguration.equals(that.mapConfiguration) && initialCircles.equals(that.initialCircles) && initialMarkers.equals(that.initialMarkers) && initialPolygons.equals(that.initialPolygons) && initialPolylines.equals(that.initialPolylines) && initialHeatmaps.equals(that.initialHeatmaps) && initialTileOverlays.equals(that.initialTileOverlays) && initialClusterManagers.equals(that.initialClusterManagers); } @Override public int hashCode() { - return Objects.hash( - initialCameraPosition, - mapConfiguration, - initialCircles, - initialMarkers, - initialPolygons, - initialPolylines, - initialHeatmaps, - initialTileOverlays, - initialClusterManagers); + return Objects.hash(initialCameraPosition, mapConfiguration, initialCircles, initialMarkers, initialPolygons, initialPolylines, initialHeatmaps, initialTileOverlays, initialClusterManagers); } public static final class Builder { @@ -4106,8 +3869,7 @@ public static final class Builder { private @Nullable List initialClusterManagers; @CanIgnoreReturnValue - public @NonNull Builder setInitialClusterManagers( - @NonNull List setterArg) { + public @NonNull Builder setInitialClusterManagers(@NonNull List setterArg) { this.initialClusterManagers = setterArg; return this; } @@ -4142,8 +3904,7 @@ ArrayList toList() { return toListResult; } - static @NonNull PlatformMapViewCreationParams fromList( - @NonNull ArrayList pigeonVar_list) { + static @NonNull PlatformMapViewCreationParams fromList(@NonNull ArrayList pigeonVar_list) { PlatformMapViewCreationParams pigeonResult = new PlatformMapViewCreationParams(); Object initialCameraPosition = pigeonVar_list.get(0); pigeonResult.setInitialCameraPosition((PlatformCameraPosition) initialCameraPosition); @@ -4170,7 +3931,7 @@ ArrayList toList() { /** * Pigeon equivalent of MapConfiguration. * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformMapConfiguration { private @Nullable Boolean compassEnabled; @@ -4375,58 +4136,15 @@ public void setStyle(@Nullable String setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformMapConfiguration that = (PlatformMapConfiguration) o; - return Objects.equals(compassEnabled, that.compassEnabled) - && Objects.equals(cameraTargetBounds, that.cameraTargetBounds) - && Objects.equals(mapType, that.mapType) - && Objects.equals(minMaxZoomPreference, that.minMaxZoomPreference) - && Objects.equals(mapToolbarEnabled, that.mapToolbarEnabled) - && Objects.equals(rotateGesturesEnabled, that.rotateGesturesEnabled) - && Objects.equals(scrollGesturesEnabled, that.scrollGesturesEnabled) - && Objects.equals(tiltGesturesEnabled, that.tiltGesturesEnabled) - && Objects.equals(trackCameraPosition, that.trackCameraPosition) - && Objects.equals(zoomControlsEnabled, that.zoomControlsEnabled) - && Objects.equals(zoomGesturesEnabled, that.zoomGesturesEnabled) - && Objects.equals(myLocationEnabled, that.myLocationEnabled) - && Objects.equals(myLocationButtonEnabled, that.myLocationButtonEnabled) - && Objects.equals(padding, that.padding) - && Objects.equals(indoorViewEnabled, that.indoorViewEnabled) - && Objects.equals(trafficEnabled, that.trafficEnabled) - && Objects.equals(buildingsEnabled, that.buildingsEnabled) - && Objects.equals(liteModeEnabled, that.liteModeEnabled) - && Objects.equals(cloudMapId, that.cloudMapId) - && Objects.equals(style, that.style); + return Objects.equals(compassEnabled, that.compassEnabled) && Objects.equals(cameraTargetBounds, that.cameraTargetBounds) && Objects.equals(mapType, that.mapType) && Objects.equals(minMaxZoomPreference, that.minMaxZoomPreference) && Objects.equals(mapToolbarEnabled, that.mapToolbarEnabled) && Objects.equals(rotateGesturesEnabled, that.rotateGesturesEnabled) && Objects.equals(scrollGesturesEnabled, that.scrollGesturesEnabled) && Objects.equals(tiltGesturesEnabled, that.tiltGesturesEnabled) && Objects.equals(trackCameraPosition, that.trackCameraPosition) && Objects.equals(zoomControlsEnabled, that.zoomControlsEnabled) && Objects.equals(zoomGesturesEnabled, that.zoomGesturesEnabled) && Objects.equals(myLocationEnabled, that.myLocationEnabled) && Objects.equals(myLocationButtonEnabled, that.myLocationButtonEnabled) && Objects.equals(padding, that.padding) && Objects.equals(indoorViewEnabled, that.indoorViewEnabled) && Objects.equals(trafficEnabled, that.trafficEnabled) && Objects.equals(buildingsEnabled, that.buildingsEnabled) && Objects.equals(liteModeEnabled, that.liteModeEnabled) && Objects.equals(cloudMapId, that.cloudMapId) && Objects.equals(style, that.style); } @Override public int hashCode() { - return Objects.hash( - compassEnabled, - cameraTargetBounds, - mapType, - minMaxZoomPreference, - mapToolbarEnabled, - rotateGesturesEnabled, - scrollGesturesEnabled, - tiltGesturesEnabled, - trackCameraPosition, - zoomControlsEnabled, - zoomGesturesEnabled, - myLocationEnabled, - myLocationButtonEnabled, - padding, - indoorViewEnabled, - trafficEnabled, - buildingsEnabled, - liteModeEnabled, - cloudMapId, - style); + return Objects.hash(compassEnabled, cameraTargetBounds, mapType, minMaxZoomPreference, mapToolbarEnabled, rotateGesturesEnabled, scrollGesturesEnabled, tiltGesturesEnabled, trackCameraPosition, zoomControlsEnabled, zoomGesturesEnabled, myLocationEnabled, myLocationButtonEnabled, padding, indoorViewEnabled, trafficEnabled, buildingsEnabled, liteModeEnabled, cloudMapId, style); } public static final class Builder { @@ -4442,8 +4160,7 @@ public static final class Builder { private @Nullable PlatformCameraTargetBounds cameraTargetBounds; @CanIgnoreReturnValue - public @NonNull Builder setCameraTargetBounds( - @Nullable PlatformCameraTargetBounds setterArg) { + public @NonNull Builder setCameraTargetBounds(@Nullable PlatformCameraTargetBounds setterArg) { this.cameraTargetBounds = setterArg; return this; } @@ -4693,7 +4410,7 @@ ArrayList toList() { /** * Pigeon representation of an x,y coordinate. * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformPoint { private @NonNull Long x; @@ -4727,12 +4444,8 @@ public void setY(@NonNull Long setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformPoint that = (PlatformPoint) o; return x.equals(that.x) && y.equals(that.y); } @@ -4789,7 +4502,7 @@ ArrayList toList() { /** * Pigeon equivalent of native TileOverlay properties. * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformTileLayer { private @NonNull Boolean visible; @@ -4849,17 +4562,10 @@ public void setZIndex(@NonNull Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformTileLayer that = (PlatformTileLayer) o; - return visible.equals(that.visible) - && fadeIn.equals(that.fadeIn) - && transparency.equals(that.transparency) - && zIndex.equals(that.zIndex); + return visible.equals(that.visible) && fadeIn.equals(that.fadeIn) && transparency.equals(that.transparency) && zIndex.equals(that.zIndex); } @Override @@ -4938,7 +4644,7 @@ ArrayList toList() { /** * Possible outcomes of launching a URL. * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformZoomRange { private @Nullable Double min; @@ -4963,12 +4669,8 @@ public void setMax(@Nullable Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformZoomRange that = (PlatformZoomRange) o; return Objects.equals(min, that.min) && Objects.equals(max, that.max); } @@ -5023,18 +4725,20 @@ ArrayList toList() { } /** - * Pigeon equivalent of [BitmapDescriptor]. As there are multiple disjoint types of - * [BitmapDescriptor], [PlatformBitmap] contains a single field which may hold the pigeon - * equivalent type of any of them. + * Pigeon equivalent of [BitmapDescriptor]. As there are multiple disjoint + * types of [BitmapDescriptor], [PlatformBitmap] contains a single field which + * may hold the pigeon equivalent type of any of them. * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformBitmap { /** - * One of [PlatformBitmapAssetMap], [PlatformBitmapAsset], [PlatformBitmapAssetImage], - * [PlatformBitmapBytesMap], [PlatformBitmapBytes], or [PlatformBitmapDefaultMarker]. As Pigeon - * does not currently support data class inheritance, this approach allows for the different - * bitmap implementations to be valid argument and return types of the API methods. See + * One of [PlatformBitmapAssetMap], [PlatformBitmapAsset], + * [PlatformBitmapAssetImage], [PlatformBitmapBytesMap], + * [PlatformBitmapBytes], or [PlatformBitmapDefaultMarker]. + * As Pigeon does not currently support data class inheritance, this + * approach allows for the different bitmap implementations to be valid + * argument and return types of the API methods. See * https://github.com/flutter/flutter/issues/117819. */ private @NonNull Object bitmap; @@ -5055,12 +4759,8 @@ public void setBitmap(@NonNull Object setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformBitmap that = (PlatformBitmap) o; return bitmap.equals(that.bitmap); } @@ -5106,7 +4806,7 @@ ArrayList toList() { * Pigeon equivalent of [DefaultMarker]. See * https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/BitmapDescriptorFactory#defaultMarker(float) * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformBitmapDefaultMarker { private @Nullable Double hue; @@ -5121,12 +4821,8 @@ public void setHue(@Nullable Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformBitmapDefaultMarker that = (PlatformBitmapDefaultMarker) o; return Objects.equals(hue, that.hue); } @@ -5160,8 +4856,7 @@ ArrayList toList() { return toListResult; } - static @NonNull PlatformBitmapDefaultMarker fromList( - @NonNull ArrayList pigeonVar_list) { + static @NonNull PlatformBitmapDefaultMarker fromList(@NonNull ArrayList pigeonVar_list) { PlatformBitmapDefaultMarker pigeonResult = new PlatformBitmapDefaultMarker(); Object hue = pigeonVar_list.get(0); pigeonResult.setHue((Double) hue); @@ -5173,7 +4868,7 @@ ArrayList toList() { * Pigeon equivalent of [BytesBitmap]. See * https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/BitmapDescriptorFactory#fromBitmap(android.graphics.Bitmap) * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformBitmapBytes { private @NonNull byte[] byteData; @@ -5204,12 +4899,8 @@ public void setSize(@Nullable PlatformDoublePair setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformBitmapBytes that = (PlatformBitmapBytes) o; return Arrays.equals(byteData, that.byteData) && Objects.equals(size, that.size); } @@ -5269,7 +4960,7 @@ ArrayList toList() { * Pigeon equivalent of [AssetBitmap]. See * https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/BitmapDescriptorFactory#public-static-bitmapdescriptor-fromasset-string-assetname * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformBitmapAsset { private @NonNull String name; @@ -5300,12 +4991,8 @@ public void setPkg(@Nullable String setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformBitmapAsset that = (PlatformBitmapAsset) o; return name.equals(that.name) && Objects.equals(pkg, that.pkg); } @@ -5363,7 +5050,7 @@ ArrayList toList() { * Pigeon equivalent of [AssetImageBitmap]. See * https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/BitmapDescriptorFactory#public-static-bitmapdescriptor-fromasset-string-assetname * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformBitmapAssetImage { private @NonNull String name; @@ -5407,12 +5094,8 @@ public void setSize(@Nullable PlatformDoublePair setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformBitmapAssetImage that = (PlatformBitmapAssetImage) o; return name.equals(that.name) && scale.equals(that.scale) && Objects.equals(size, that.size); } @@ -5482,7 +5165,7 @@ ArrayList toList() { * Pigeon equivalent of [AssetMapBitmap]. See * https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/BitmapDescriptorFactory#public-static-bitmapdescriptor-fromasset-string-assetname * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformBitmapAssetMap { private @NonNull String assetName; @@ -5549,18 +5232,10 @@ public void setHeight(@Nullable Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformBitmapAssetMap that = (PlatformBitmapAssetMap) o; - return assetName.equals(that.assetName) - && bitmapScaling.equals(that.bitmapScaling) - && imagePixelRatio.equals(that.imagePixelRatio) - && Objects.equals(width, that.width) - && Objects.equals(height, that.height); + return assetName.equals(that.assetName) && bitmapScaling.equals(that.bitmapScaling) && imagePixelRatio.equals(that.imagePixelRatio) && Objects.equals(width, that.width) && Objects.equals(height, that.height); } @Override @@ -5652,7 +5327,7 @@ ArrayList toList() { * Pigeon equivalent of [BytesMapBitmap]. See * https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/BitmapDescriptorFactory#public-static-bitmapdescriptor-frombitmap-bitmap-image * - *

Generated class from Pigeon that represents data sent in messages. + * Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformBitmapBytesMap { private @NonNull byte[] byteData; @@ -5719,18 +5394,10 @@ public void setHeight(@Nullable Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } PlatformBitmapBytesMap that = (PlatformBitmapBytesMap) o; - return Arrays.equals(byteData, that.byteData) - && bitmapScaling.equals(that.bitmapScaling) - && imagePixelRatio.equals(that.imagePixelRatio) - && Objects.equals(width, that.width) - && Objects.equals(height, that.height); + return Arrays.equals(byteData, that.byteData) && bitmapScaling.equals(that.bitmapScaling) && imagePixelRatio.equals(that.imagePixelRatio) && Objects.equals(width, that.width) && Objects.equals(height, that.height); } @Override @@ -5820,6 +5487,73 @@ ArrayList toList() { } } + /** + * Pigeon equivalent of a registered bitmap. + * + * Generated class from Pigeon that represents data sent in messages. + */ + public static final class PlatformBitmapRegisteredMapBitmap { + private @NonNull Long id; + + public @NonNull Long getId() { + return id; + } + + public void setId(@NonNull Long setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"id\" is null."); + } + this.id = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + PlatformBitmapRegisteredMapBitmap() {} + + @Override + public boolean equals(Object o) { + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } + PlatformBitmapRegisteredMapBitmap that = (PlatformBitmapRegisteredMapBitmap) o; + return id.equals(that.id); + } + + @Override + public int hashCode() { + return Objects.hash(id); + } + + public static final class Builder { + + private @Nullable Long id; + + @CanIgnoreReturnValue + public @NonNull Builder setId(@NonNull Long setterArg) { + this.id = setterArg; + return this; + } + + public @NonNull PlatformBitmapRegisteredMapBitmap build() { + PlatformBitmapRegisteredMapBitmap pigeonReturn = new PlatformBitmapRegisteredMapBitmap(); + pigeonReturn.setId(id); + return pigeonReturn; + } + } + + @NonNull + ArrayList toList() { + ArrayList toListResult = new ArrayList<>(1); + toListResult.add(id); + return toListResult; + } + + static @NonNull PlatformBitmapRegisteredMapBitmap fromList(@NonNull ArrayList pigeonVar_list) { + PlatformBitmapRegisteredMapBitmap pigeonResult = new PlatformBitmapRegisteredMapBitmap(); + Object id = pigeonVar_list.get(0); + pigeonResult.setId((Long) id); + return pigeonResult; + } + } + private static class PigeonCodec extends StandardMessageCodec { public static final PigeonCodec INSTANCE = new PigeonCodec(); @@ -5828,52 +5562,40 @@ private PigeonCodec() {} @Override protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) { switch (type) { - case (byte) 129: - { - Object value = readValue(buffer); - return value == null ? null : PlatformMapType.values()[((Long) value).intValue()]; - } - case (byte) 130: - { - Object value = readValue(buffer); - return value == null ? null : PlatformRendererType.values()[((Long) value).intValue()]; - } - case (byte) 131: - { - Object value = readValue(buffer); - return value == null ? null : PlatformJointType.values()[((Long) value).intValue()]; - } - case (byte) 132: - { - Object value = readValue(buffer); - return value == null ? null : PlatformCapType.values()[((Long) value).intValue()]; - } - case (byte) 133: - { - Object value = readValue(buffer); - return value == null - ? null - : PlatformPatternItemType.values()[((Long) value).intValue()]; - } - case (byte) 134: - { - Object value = readValue(buffer); - return value == null - ? null - : PlatformMapBitmapScaling.values()[((Long) value).intValue()]; - } + case (byte) 129: { + Object value = readValue(buffer); + return value == null ? null : PlatformMapType.values()[((Long) value).intValue()]; + } + case (byte) 130: { + Object value = readValue(buffer); + return value == null ? null : PlatformRendererType.values()[((Long) value).intValue()]; + } + case (byte) 131: { + Object value = readValue(buffer); + return value == null ? null : PlatformJointType.values()[((Long) value).intValue()]; + } + case (byte) 132: { + Object value = readValue(buffer); + return value == null ? null : PlatformCapType.values()[((Long) value).intValue()]; + } + case (byte) 133: { + Object value = readValue(buffer); + return value == null ? null : PlatformPatternItemType.values()[((Long) value).intValue()]; + } + case (byte) 134: { + Object value = readValue(buffer); + return value == null ? null : PlatformMapBitmapScaling.values()[((Long) value).intValue()]; + } case (byte) 135: return PlatformCameraPosition.fromList((ArrayList) readValue(buffer)); case (byte) 136: return PlatformCameraUpdate.fromList((ArrayList) readValue(buffer)); case (byte) 137: - return PlatformCameraUpdateNewCameraPosition.fromList( - (ArrayList) readValue(buffer)); + return PlatformCameraUpdateNewCameraPosition.fromList((ArrayList) readValue(buffer)); case (byte) 138: return PlatformCameraUpdateNewLatLng.fromList((ArrayList) readValue(buffer)); case (byte) 139: - return PlatformCameraUpdateNewLatLngBounds.fromList( - (ArrayList) readValue(buffer)); + return PlatformCameraUpdateNewLatLngBounds.fromList((ArrayList) readValue(buffer)); case (byte) 140: return PlatformCameraUpdateNewLatLngZoom.fromList((ArrayList) readValue(buffer)); case (byte) 141: @@ -5942,6 +5664,8 @@ protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) { return PlatformBitmapAssetMap.fromList((ArrayList) readValue(buffer)); case (byte) 173: return PlatformBitmapBytesMap.fromList((ArrayList) readValue(buffer)); + case (byte) 174: + return PlatformBitmapRegisteredMapBitmap.fromList((ArrayList) readValue(buffer)); default: return super.readValueOfType(type, buffer); } @@ -6084,12 +5808,16 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { } else if (value instanceof PlatformBitmapBytesMap) { stream.write(173); writeValue(stream, ((PlatformBitmapBytesMap) value).toList()); + } else if (value instanceof PlatformBitmapRegisteredMapBitmap) { + stream.write(174); + writeValue(stream, ((PlatformBitmapRegisteredMapBitmap) value).toList()); } else { super.writeValue(stream, value); } } } + /** Asynchronous error handling return type for non-nullable API method returns. */ public interface Result { /** Success case callback method for handling returns. */ @@ -6117,9 +5845,9 @@ public interface VoidResult { /** * Interface for non-test interactions with the native SDK. * - *

For test-only state queries, see [MapsInspectorApi]. + * For test-only state queries, see [MapsInspectorApi]. * - *

Generated interface from Pigeon that represents a handler of messages from Flutter. + * Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface MapsApi { /** Returns once the map instance is available. */ @@ -6127,82 +5855,70 @@ public interface MapsApi { /** * Updates the map's configuration options. * - *

Only non-null configuration values will result in updates; options with null values will - * remain unchanged. + * Only non-null configuration values will result in updates; options with + * null values will remain unchanged. */ void updateMapConfiguration(@NonNull PlatformMapConfiguration configuration); /** Updates the set of circles on the map. */ - void updateCircles( - @NonNull List toAdd, - @NonNull List toChange, - @NonNull List idsToRemove); + void updateCircles(@NonNull List toAdd, @NonNull List toChange, @NonNull List idsToRemove); /** Updates the set of heatmaps on the map. */ - void updateHeatmaps( - @NonNull List toAdd, - @NonNull List toChange, - @NonNull List idsToRemove); + void updateHeatmaps(@NonNull List toAdd, @NonNull List toChange, @NonNull List idsToRemove); /** Updates the set of custer managers for clusters on the map. */ - void updateClusterManagers( - @NonNull List toAdd, @NonNull List idsToRemove); + void updateClusterManagers(@NonNull List toAdd, @NonNull List idsToRemove); /** Updates the set of markers on the map. */ - void updateMarkers( - @NonNull List toAdd, - @NonNull List toChange, - @NonNull List idsToRemove); + void updateMarkers(@NonNull List toAdd, @NonNull List toChange, @NonNull List idsToRemove); /** Updates the set of polygonss on the map. */ - void updatePolygons( - @NonNull List toAdd, - @NonNull List toChange, - @NonNull List idsToRemove); + void updatePolygons(@NonNull List toAdd, @NonNull List toChange, @NonNull List idsToRemove); /** Updates the set of polylines on the map. */ - void updatePolylines( - @NonNull List toAdd, - @NonNull List toChange, - @NonNull List idsToRemove); + void updatePolylines(@NonNull List toAdd, @NonNull List toChange, @NonNull List idsToRemove); /** Updates the set of tile overlays on the map. */ - void updateTileOverlays( - @NonNull List toAdd, - @NonNull List toChange, - @NonNull List idsToRemove); + void updateTileOverlays(@NonNull List toAdd, @NonNull List toChange, @NonNull List idsToRemove); /** Gets the screen coordinate for the given map location. */ - @NonNull + @NonNull PlatformPoint getScreenCoordinate(@NonNull PlatformLatLng latLng); /** Gets the map location for the given screen coordinate. */ - @NonNull + @NonNull PlatformLatLng getLatLng(@NonNull PlatformPoint screenCoordinate); /** Gets the map region currently displayed on the map. */ - @NonNull + @NonNull PlatformLatLngBounds getVisibleRegion(); - /** Moves the camera according to [cameraUpdate] immediately, with no animation. */ + /** + * Moves the camera according to [cameraUpdate] immediately, with no + * animation. + */ void moveCamera(@NonNull PlatformCameraUpdate cameraUpdate); /** Moves the camera according to [cameraUpdate], animating the update. */ void animateCamera(@NonNull PlatformCameraUpdate cameraUpdate); /** Gets the current map zoom level. */ - @NonNull + @NonNull Double getZoomLevel(); /** Show the info window for the marker with the given ID. */ void showInfoWindow(@NonNull String markerId); /** Hide the info window for the marker with the given ID. */ void hideInfoWindow(@NonNull String markerId); - /** Returns true if the marker with the given ID is currently displaying its info window. */ - @NonNull + /** + * Returns true if the marker with the given ID is currently displaying its + * info window. + */ + @NonNull Boolean isInfoWindowShown(@NonNull String markerId); /** - * Sets the style to the given map style string, where an empty string indicates that the style - * should be cleared. + * Sets the style to the given map style string, where an empty string + * indicates that the style should be cleared. * - *

Returns false if there was an error setting the style, such as an invalid style string. + * Returns false if there was an error setting the style, such as an invalid + * style string. */ - @NonNull + @NonNull Boolean setStyle(@NonNull String style); /** - * Returns true if the last attempt to set a style, either via initial map style or setMapStyle, - * succeeded. + * Returns true if the last attempt to set a style, either via initial map + * style or setMapStyle, succeeded. * - *

This allows checking asynchronously for initial style failures, as there is no way to - * return failures from map initialization. + * This allows checking asynchronously for initial style failures, as there + * is no way to return failures from map initialization. */ - @NonNull + @NonNull Boolean didLastStyleSucceed(); /** Clears the cache of tiles previously requseted from the tile provider. */ void clearTileCache(@NonNull String tileOverlayId); @@ -6213,23 +5929,16 @@ void updateTileOverlays( static @NonNull MessageCodec getCodec() { return PigeonCodec.INSTANCE; } - /** Sets up an instance of `MapsApi` to handle messages through the `binaryMessenger`. */ + /**Sets up an instance of `MapsApi` to handle messages through the `binaryMessenger`. */ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable MapsApi api) { setUp(binaryMessenger, "", api); } - - static void setUp( - @NonNull BinaryMessenger binaryMessenger, - @NonNull String messageChannelSuffix, - @Nullable MapsApi api) { + static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String messageChannelSuffix, @Nullable MapsApi api) { messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.waitForMap" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.waitForMap" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6256,10 +5965,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateMapConfiguration" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateMapConfiguration" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6269,7 +5975,8 @@ public void error(Throwable error) { try { api.updateMapConfiguration(configurationArg); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6281,10 +5988,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateCircles" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateCircles" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6296,7 +6000,8 @@ public void error(Throwable error) { try { api.updateCircles(toAddArg, toChangeArg, idsToRemoveArg); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6308,10 +6013,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateHeatmaps" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateHeatmaps" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6323,7 +6025,8 @@ public void error(Throwable error) { try { api.updateHeatmaps(toAddArg, toChangeArg, idsToRemoveArg); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6335,10 +6038,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateClusterManagers" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateClusterManagers" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6349,7 +6049,8 @@ public void error(Throwable error) { try { api.updateClusterManagers(toAddArg, idsToRemoveArg); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6361,10 +6062,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateMarkers" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateMarkers" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6376,7 +6074,8 @@ public void error(Throwable error) { try { api.updateMarkers(toAddArg, toChangeArg, idsToRemoveArg); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6388,10 +6087,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updatePolygons" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updatePolygons" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6403,7 +6099,8 @@ public void error(Throwable error) { try { api.updatePolygons(toAddArg, toChangeArg, idsToRemoveArg); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6415,10 +6112,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updatePolylines" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updatePolylines" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6430,7 +6124,8 @@ public void error(Throwable error) { try { api.updatePolylines(toAddArg, toChangeArg, idsToRemoveArg); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6442,10 +6137,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateTileOverlays" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateTileOverlays" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6457,7 +6149,8 @@ public void error(Throwable error) { try { api.updateTileOverlays(toAddArg, toChangeArg, idsToRemoveArg); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6469,10 +6162,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getScreenCoordinate" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getScreenCoordinate" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6482,7 +6172,8 @@ public void error(Throwable error) { try { PlatformPoint output = api.getScreenCoordinate(latLngArg); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6494,10 +6185,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getLatLng" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getLatLng" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6507,7 +6195,8 @@ public void error(Throwable error) { try { PlatformLatLng output = api.getLatLng(screenCoordinateArg); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6519,10 +6208,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getVisibleRegion" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getVisibleRegion" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6530,7 +6216,8 @@ public void error(Throwable error) { try { PlatformLatLngBounds output = api.getVisibleRegion(); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6542,10 +6229,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.moveCamera" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.moveCamera" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6555,7 +6239,8 @@ public void error(Throwable error) { try { api.moveCamera(cameraUpdateArg); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6567,10 +6252,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.animateCamera" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.animateCamera" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6580,7 +6262,8 @@ public void error(Throwable error) { try { api.animateCamera(cameraUpdateArg); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6592,10 +6275,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getZoomLevel" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getZoomLevel" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6603,7 +6283,8 @@ public void error(Throwable error) { try { Double output = api.getZoomLevel(); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6615,10 +6296,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.showInfoWindow" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.showInfoWindow" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6628,7 +6306,8 @@ public void error(Throwable error) { try { api.showInfoWindow(markerIdArg); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6640,10 +6319,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.hideInfoWindow" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.hideInfoWindow" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6653,7 +6329,8 @@ public void error(Throwable error) { try { api.hideInfoWindow(markerIdArg); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6665,10 +6342,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.isInfoWindowShown" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.isInfoWindowShown" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6678,7 +6352,8 @@ public void error(Throwable error) { try { Boolean output = api.isInfoWindowShown(markerIdArg); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6690,10 +6365,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.setStyle" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.setStyle" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6703,7 +6375,8 @@ public void error(Throwable error) { try { Boolean output = api.setStyle(styleArg); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6715,10 +6388,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.didLastStyleSucceed" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.didLastStyleSucceed" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6726,7 +6396,8 @@ public void error(Throwable error) { try { Boolean output = api.didLastStyleSucceed(); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6738,10 +6409,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.clearTileCache" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.clearTileCache" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6751,7 +6419,8 @@ public void error(Throwable error) { try { api.clearTileCache(tileOverlayIdArg); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6763,10 +6432,7 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.takeSnapshot" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.takeSnapshot" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6800,439 +6466,368 @@ public static class MapsCallbackApi { public MapsCallbackApi(@NonNull BinaryMessenger argBinaryMessenger) { this(argBinaryMessenger, ""); } - - public MapsCallbackApi( - @NonNull BinaryMessenger argBinaryMessenger, @NonNull String messageChannelSuffix) { + public MapsCallbackApi(@NonNull BinaryMessenger argBinaryMessenger, @NonNull String messageChannelSuffix) { this.binaryMessenger = argBinaryMessenger; this.messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; } - /** Public interface for sending reply. The codec used by MapsCallbackApi. */ + /** + * Public interface for sending reply. + * The codec used by MapsCallbackApi. + */ static @NonNull MessageCodec getCodec() { return PigeonCodec.INSTANCE; } /** Called when the map camera starts moving. */ public void onCameraMoveStarted(@NonNull VoidResult result) { - final String channelName = - "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraMoveStarted" - + messageChannelSuffix; + final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraMoveStarted" + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>( + binaryMessenger, channelName, getCodec()); channel.send( null, channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error( - new FlutterError( - (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when the map camera moves. */ - public void onCameraMove( - @NonNull PlatformCameraPosition cameraPositionArg, @NonNull VoidResult result) { - final String channelName = - "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraMove" - + messageChannelSuffix; + public void onCameraMove(@NonNull PlatformCameraPosition cameraPositionArg, @NonNull VoidResult result) { + final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraMove" + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>( + binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Collections.singletonList(cameraPositionArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error( - new FlutterError( - (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when the map camera stops moving. */ public void onCameraIdle(@NonNull VoidResult result) { - final String channelName = - "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraIdle" - + messageChannelSuffix; + final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraIdle" + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>( + binaryMessenger, channelName, getCodec()); channel.send( null, channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error( - new FlutterError( - (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when the map, not a specifc map object, is tapped. */ public void onTap(@NonNull PlatformLatLng positionArg, @NonNull VoidResult result) { - final String channelName = - "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onTap" - + messageChannelSuffix; + final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onTap" + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>( + binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Collections.singletonList(positionArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error( - new FlutterError( - (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when the map, not a specifc map object, is long pressed. */ public void onLongPress(@NonNull PlatformLatLng positionArg, @NonNull VoidResult result) { - final String channelName = - "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onLongPress" - + messageChannelSuffix; + final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onLongPress" + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>( + binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Collections.singletonList(positionArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error( - new FlutterError( - (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when a marker is tapped. */ public void onMarkerTap(@NonNull String markerIdArg, @NonNull VoidResult result) { - final String channelName = - "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerTap" - + messageChannelSuffix; + final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerTap" + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>( + binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Collections.singletonList(markerIdArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error( - new FlutterError( - (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when a marker drag starts. */ - public void onMarkerDragStart( - @NonNull String markerIdArg, - @NonNull PlatformLatLng positionArg, - @NonNull VoidResult result) { - final String channelName = - "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDragStart" - + messageChannelSuffix; + public void onMarkerDragStart(@NonNull String markerIdArg, @NonNull PlatformLatLng positionArg, @NonNull VoidResult result) { + final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDragStart" + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>( + binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Arrays.asList(markerIdArg, positionArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error( - new FlutterError( - (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when a marker drag updates. */ - public void onMarkerDrag( - @NonNull String markerIdArg, - @NonNull PlatformLatLng positionArg, - @NonNull VoidResult result) { - final String channelName = - "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDrag" - + messageChannelSuffix; + public void onMarkerDrag(@NonNull String markerIdArg, @NonNull PlatformLatLng positionArg, @NonNull VoidResult result) { + final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDrag" + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>( + binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Arrays.asList(markerIdArg, positionArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error( - new FlutterError( - (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when a marker drag ends. */ - public void onMarkerDragEnd( - @NonNull String markerIdArg, - @NonNull PlatformLatLng positionArg, - @NonNull VoidResult result) { - final String channelName = - "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDragEnd" - + messageChannelSuffix; + public void onMarkerDragEnd(@NonNull String markerIdArg, @NonNull PlatformLatLng positionArg, @NonNull VoidResult result) { + final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDragEnd" + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>( + binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Arrays.asList(markerIdArg, positionArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error( - new FlutterError( - (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when a marker's info window is tapped. */ public void onInfoWindowTap(@NonNull String markerIdArg, @NonNull VoidResult result) { - final String channelName = - "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onInfoWindowTap" - + messageChannelSuffix; + final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onInfoWindowTap" + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>( + binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Collections.singletonList(markerIdArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error( - new FlutterError( - (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when a circle is tapped. */ public void onCircleTap(@NonNull String circleIdArg, @NonNull VoidResult result) { - final String channelName = - "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCircleTap" - + messageChannelSuffix; + final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCircleTap" + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>( + binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Collections.singletonList(circleIdArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error( - new FlutterError( - (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when a marker cluster is tapped. */ public void onClusterTap(@NonNull PlatformCluster clusterArg, @NonNull VoidResult result) { - final String channelName = - "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onClusterTap" - + messageChannelSuffix; + final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onClusterTap" + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>( + binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Collections.singletonList(clusterArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error( - new FlutterError( - (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when a polygon is tapped. */ public void onPolygonTap(@NonNull String polygonIdArg, @NonNull VoidResult result) { - final String channelName = - "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onPolygonTap" - + messageChannelSuffix; + final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onPolygonTap" + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>( + binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Collections.singletonList(polygonIdArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error( - new FlutterError( - (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when a polyline is tapped. */ public void onPolylineTap(@NonNull String polylineIdArg, @NonNull VoidResult result) { - final String channelName = - "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onPolylineTap" - + messageChannelSuffix; + final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onPolylineTap" + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>( + binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Collections.singletonList(polylineIdArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error( - new FlutterError( - (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called to get data for a map tile. */ - public void getTileOverlayTile( - @NonNull String tileOverlayIdArg, - @NonNull PlatformPoint locationArg, - @NonNull Long zoomArg, - @NonNull Result result) { - final String channelName = - "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.getTileOverlayTile" - + messageChannelSuffix; + public void getTileOverlayTile(@NonNull String tileOverlayIdArg, @NonNull PlatformPoint locationArg, @NonNull Long zoomArg, @NonNull Result result) { + final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.getTileOverlayTile" + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>( + binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Arrays.asList(tileOverlayIdArg, locationArg, zoomArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error( - new FlutterError( - (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else if (listReply.get(0) == null) { - result.error( - new FlutterError( - "null-error", - "Flutter api returned null value for non-null return value.", - "")); + result.error(new FlutterError("null-error", "Flutter api returned null value for non-null return value.", "")); } else { @SuppressWarnings("ConstantConditions") PlatformTile output = (PlatformTile) listReply.get(0); result.success(output); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } } /** * Interface for global SDK initialization. * - *

Generated interface from Pigeon that represents a handler of messages from Flutter. + * Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface MapsInitializerApi { /** * Initializes the Google Maps SDK with the given renderer preference. * - *

A null renderer preference will result in the default renderer. + * A null renderer preference will result in the default renderer. * - *

Calling this more than once in the lifetime of an application will result in an error. + * Calling this more than once in the lifetime of an application will result + * in an error. */ - void initializeWithPreferredRenderer( - @Nullable PlatformRendererType type, @NonNull Result result); + void initializeWithPreferredRenderer(@Nullable PlatformRendererType type, @NonNull Result result); /** The codec used by MapsInitializerApi. */ static @NonNull MessageCodec getCodec() { return PigeonCodec.INSTANCE; } - /** - * Sets up an instance of `MapsInitializerApi` to handle messages through the `binaryMessenger`. - */ + /**Sets up an instance of `MapsInitializerApi` to handle messages through the `binaryMessenger`. */ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable MapsInitializerApi api) { setUp(binaryMessenger, "", api); } - - static void setUp( - @NonNull BinaryMessenger binaryMessenger, - @NonNull String messageChannelSuffix, - @Nullable MapsInitializerApi api) { + static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String messageChannelSuffix, @Nullable MapsInitializerApi api) { messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsInitializerApi.initializeWithPreferredRenderer" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInitializerApi.initializeWithPreferredRenderer" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7261,10 +6856,11 @@ public void error(Throwable error) { } } /** - * Dummy interface to force generation of the platform view creation params, which are not used in - * any Pigeon calls, only the platform view creation call made internally by Flutter. + * Dummy interface to force generation of the platform view creation params, + * which are not used in any Pigeon calls, only the platform view creation + * call made internally by Flutter. * - *

Generated interface from Pigeon that represents a handler of messages from Flutter. + * Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface MapsPlatformViewApi { @@ -7274,26 +6870,16 @@ public interface MapsPlatformViewApi { static @NonNull MessageCodec getCodec() { return PigeonCodec.INSTANCE; } - /** - * Sets up an instance of `MapsPlatformViewApi` to handle messages through the - * `binaryMessenger`. - */ + /**Sets up an instance of `MapsPlatformViewApi` to handle messages through the `binaryMessenger`. */ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable MapsPlatformViewApi api) { setUp(binaryMessenger, "", api); } - - static void setUp( - @NonNull BinaryMessenger binaryMessenger, - @NonNull String messageChannelSuffix, - @Nullable MapsPlatformViewApi api) { + static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String messageChannelSuffix, @Nullable MapsPlatformViewApi api) { messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsPlatformViewApi.createView" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsPlatformViewApi.createView" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7303,7 +6889,8 @@ static void setUp( try { api.createView(typeArg); wrapped.add(0, null); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7317,75 +6904,66 @@ static void setUp( /** * Inspector API only intended for use in integration tests. * - *

Generated interface from Pigeon that represents a handler of messages from Flutter. + * Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface MapsInspectorApi { - @NonNull + @NonNull Boolean areBuildingsEnabled(); - @NonNull + @NonNull Boolean areRotateGesturesEnabled(); - @NonNull + @NonNull Boolean areZoomControlsEnabled(); - @NonNull + @NonNull Boolean areScrollGesturesEnabled(); - @NonNull + @NonNull Boolean areTiltGesturesEnabled(); - @NonNull + @NonNull Boolean areZoomGesturesEnabled(); - @NonNull + @NonNull Boolean isCompassEnabled(); - @Nullable + @Nullable Boolean isLiteModeEnabled(); - @NonNull + @NonNull Boolean isMapToolbarEnabled(); - @NonNull + @NonNull Boolean isMyLocationButtonEnabled(); - @NonNull + @NonNull Boolean isTrafficEnabled(); - @Nullable + @Nullable PlatformTileLayer getTileOverlayInfo(@NonNull String tileOverlayId); - @NonNull + @NonNull PlatformZoomRange getZoomRange(); - @NonNull + @NonNull List getClusters(@NonNull String clusterManagerId); /** The codec used by MapsInspectorApi. */ static @NonNull MessageCodec getCodec() { return PigeonCodec.INSTANCE; } - /** - * Sets up an instance of `MapsInspectorApi` to handle messages through the `binaryMessenger`. - */ + /**Sets up an instance of `MapsInspectorApi` to handle messages through the `binaryMessenger`. */ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable MapsInspectorApi api) { setUp(binaryMessenger, "", api); } - - static void setUp( - @NonNull BinaryMessenger binaryMessenger, - @NonNull String messageChannelSuffix, - @Nullable MapsInspectorApi api) { + static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String messageChannelSuffix, @Nullable MapsInspectorApi api) { messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areBuildingsEnabled" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areBuildingsEnabled" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7393,7 +6971,8 @@ static void setUp( try { Boolean output = api.areBuildingsEnabled(); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7405,10 +6984,7 @@ static void setUp( { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areRotateGesturesEnabled" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areRotateGesturesEnabled" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7416,7 +6992,8 @@ static void setUp( try { Boolean output = api.areRotateGesturesEnabled(); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7428,10 +7005,7 @@ static void setUp( { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areZoomControlsEnabled" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areZoomControlsEnabled" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7439,7 +7013,8 @@ static void setUp( try { Boolean output = api.areZoomControlsEnabled(); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7451,10 +7026,7 @@ static void setUp( { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areScrollGesturesEnabled" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areScrollGesturesEnabled" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7462,7 +7034,8 @@ static void setUp( try { Boolean output = api.areScrollGesturesEnabled(); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7474,10 +7047,7 @@ static void setUp( { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areTiltGesturesEnabled" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areTiltGesturesEnabled" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7485,7 +7055,8 @@ static void setUp( try { Boolean output = api.areTiltGesturesEnabled(); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7497,10 +7068,7 @@ static void setUp( { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areZoomGesturesEnabled" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areZoomGesturesEnabled" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7508,7 +7076,8 @@ static void setUp( try { Boolean output = api.areZoomGesturesEnabled(); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7520,10 +7089,7 @@ static void setUp( { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isCompassEnabled" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isCompassEnabled" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7531,7 +7097,8 @@ static void setUp( try { Boolean output = api.isCompassEnabled(); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7543,10 +7110,7 @@ static void setUp( { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isLiteModeEnabled" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isLiteModeEnabled" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7554,7 +7118,8 @@ static void setUp( try { Boolean output = api.isLiteModeEnabled(); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7566,10 +7131,7 @@ static void setUp( { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isMapToolbarEnabled" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isMapToolbarEnabled" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7577,7 +7139,8 @@ static void setUp( try { Boolean output = api.isMapToolbarEnabled(); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7589,10 +7152,7 @@ static void setUp( { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isMyLocationButtonEnabled" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isMyLocationButtonEnabled" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7600,7 +7160,8 @@ static void setUp( try { Boolean output = api.isMyLocationButtonEnabled(); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7612,10 +7173,7 @@ static void setUp( { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isTrafficEnabled" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isTrafficEnabled" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7623,7 +7181,8 @@ static void setUp( try { Boolean output = api.isTrafficEnabled(); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7635,10 +7194,7 @@ static void setUp( { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.getTileOverlayInfo" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.getTileOverlayInfo" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7648,7 +7204,8 @@ static void setUp( try { PlatformTileLayer output = api.getTileOverlayInfo(tileOverlayIdArg); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7660,10 +7217,7 @@ static void setUp( { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.getZoomRange" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.getZoomRange" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7671,7 +7225,8 @@ static void setUp( try { PlatformZoomRange output = api.getZoomRange(); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7683,10 +7238,7 @@ static void setUp( { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.getClusters" - + messageChannelSuffix, - getCodec()); + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.getClusters" + messageChannelSuffix, getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7696,7 +7248,101 @@ static void setUp( try { List output = api.getClusters(clusterManagerIdArg); wrapped.add(0, output); - } catch (Throwable exception) { + } + catch (Throwable exception) { + wrapped = wrapError(exception); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + } + } + /** + * API for interacting with the image registry. + * + * Generated interface from Pigeon that represents a handler of messages from Flutter. + */ + public interface ImageRegistryApi { + /** Adds a bitmap to the cache. */ + void addBitmapToCache(@NonNull Long id, @NonNull PlatformBitmap bitmap); + /** Retrieves a bitmap from the cache. */ + void removeBitmapFromCache(@NonNull Long id); + /** Clears the bitmap cache. */ + void clearBitmapCache(); + + /** The codec used by ImageRegistryApi. */ + static @NonNull MessageCodec getCodec() { + return PigeonCodec.INSTANCE; + } + /**Sets up an instance of `ImageRegistryApi` to handle messages through the `binaryMessenger`. */ + static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageRegistryApi api) { + setUp(binaryMessenger, "", api); + } + static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String messageChannelSuffix, @Nullable ImageRegistryApi api) { + messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.ImageRegistryApi.addBitmapToCache" + messageChannelSuffix, getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + Long idArg = (Long) args.get(0); + PlatformBitmap bitmapArg = (PlatformBitmap) args.get(1); + try { + api.addBitmapToCache(idArg, bitmapArg); + wrapped.add(0, null); + } + catch (Throwable exception) { + wrapped = wrapError(exception); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.ImageRegistryApi.removeBitmapFromCache" + messageChannelSuffix, getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + Long idArg = (Long) args.get(0); + try { + api.removeBitmapFromCache(idArg); + wrapped.add(0, null); + } + catch (Throwable exception) { + wrapped = wrapError(exception); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.ImageRegistryApi.clearBitmapCache" + messageChannelSuffix, getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + api.clearBitmapCache(); + wrapped.add(0, null); + } + catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/PolylinesController.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/PolylinesController.java index 65b53eb7e07..96c64984fe0 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/PolylinesController.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/PolylinesController.java @@ -22,14 +22,17 @@ class PolylinesController { private GoogleMap googleMap; private final float density; private final AssetManager assetManager; + private final ImageRegistry imageRegistry; PolylinesController( - @NonNull MapsCallbackApi flutterApi, AssetManager assetManager, float density) { + @NonNull MapsCallbackApi flutterApi, AssetManager assetManager, ImageRegistry imageRegistry, + float density) { this.assetManager = assetManager; this.polylineIdToController = new HashMap<>(); this.googleMapsPolylineIdToDartPolylineId = new HashMap<>(); this.flutterApi = flutterApi; this.density = density; + this.imageRegistry = imageRegistry; } void setGoogleMap(GoogleMap googleMap) { @@ -74,7 +77,8 @@ boolean onPolylineTap(String googlePolylineId) { private void addPolyline(@NonNull Messages.PlatformPolyline polyline) { PolylineBuilder polylineBuilder = new PolylineBuilder(density); String polylineId = - Convert.interpretPolylineOptions(polyline, polylineBuilder, assetManager, density); + Convert.interpretPolylineOptions(polyline, polylineBuilder, assetManager, imageRegistry, + density); PolylineOptions options = polylineBuilder.build(); addPolyline(polylineId, options, polylineBuilder.consumeTapEvents()); } @@ -91,7 +95,8 @@ private void changePolyline(@NonNull Messages.PlatformPolyline polyline) { String polylineId = polyline.getPolylineId(); PolylineController polylineController = polylineIdToController.get(polylineId); if (polylineController != null) { - Convert.interpretPolylineOptions(polyline, polylineController, assetManager, density); + Convert.interpretPolylineOptions(polyline, polylineController, assetManager, imageRegistry, + density); } } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_android/example/pubspec.yaml index 4aac17d849b..64726d47ef8 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/example/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/pubspec.yaml @@ -33,3 +33,8 @@ flutter: uses-material-design: true assets: - assets/ + +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + {google_maps_flutter_platform_interface: {path: ../../../../packages/google_maps_flutter/google_maps_flutter_platform_interface}} diff --git a/packages/google_maps_flutter/google_maps_flutter_android/lib/src/google_maps_flutter_android.dart b/packages/google_maps_flutter/google_maps_flutter_android/lib/src/google_maps_flutter_android.dart index dd19bed8646..18bac11966f 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/lib/src/google_maps_flutter_android.dart +++ b/packages/google_maps_flutter/google_maps_flutter_android/lib/src/google_maps_flutter_android.dart @@ -456,6 +456,23 @@ class GoogleMapsFlutterAndroid extends GoogleMapsFlutterPlatform { : _setStyleFailureMessage; } + @override + Future registerBitmap(int id, MapBitmap bitmap) { + final PlatformBitmap platformBitmap = + platformBitmapFromBitmapDescriptor(bitmap); + return ImageRegistryApi().addBitmapToCache(id, platformBitmap); + } + + @override + Future unregisterBitmap(int id) { + return ImageRegistryApi().removeBitmapFromCache(id); + } + + @override + Future clearBitmapCache() { + return ImageRegistryApi().clearBitmapCache(); + } + /// Set [GoogleMapsFlutterPlatform] to use [AndroidViewSurface] to build the /// Google Maps widget. /// @@ -925,6 +942,13 @@ class GoogleMapsFlutterAndroid extends GoogleMapsFlutterPlatform { imagePixelRatio: bytes.imagePixelRatio, width: bytes.width, height: bytes.height)); + case final RegisteredMapBitmap registeredBitmap: + return PlatformBitmap( + bitmap: PlatformBitmapRegisteredMapBitmap( + id: registeredBitmap.id, + ), + ); + default: throw ArgumentError( 'Unrecognized type of bitmap ${bitmap.runtimeType}', 'bitmap'); diff --git a/packages/google_maps_flutter/google_maps_flutter_android/lib/src/messages.g.dart b/packages/google_maps_flutter/google_maps_flutter_android/lib/src/messages.g.dart index d5cc589f22e..397fd6ce1a3 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/lib/src/messages.g.dart +++ b/packages/google_maps_flutter/google_maps_flutter_android/lib/src/messages.g.dart @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v22.6.0), do not edit directly. +// Autogenerated from Pigeon (v22.7.2), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import, no_leading_underscores_for_local_identifiers @@ -18,8 +18,7 @@ PlatformException _createConnectionError(String channelName) { ); } -List wrapResponse( - {Object? result, PlatformException? error, bool empty = false}) { +List wrapResponse({Object? result, PlatformException? error, bool empty = false}) { if (empty) { return []; } @@ -1080,10 +1079,8 @@ class PlatformMapViewCreationParams { initialPolygons: (result[4] as List?)!.cast(), initialPolylines: (result[5] as List?)!.cast(), initialHeatmaps: (result[6] as List?)!.cast(), - initialTileOverlays: - (result[7] as List?)!.cast(), - initialClusterManagers: - (result[8] as List?)!.cast(), + initialTileOverlays: (result[7] as List?)!.cast(), + initialClusterManagers: (result[8] as List?)!.cast(), ); } } @@ -1525,6 +1522,29 @@ class PlatformBitmapBytesMap { } } +/// Pigeon equivalent of a registered bitmap. +class PlatformBitmapRegisteredMapBitmap { + PlatformBitmapRegisteredMapBitmap({ + required this.id, + }); + + int id; + + Object encode() { + return [ + id, + ]; + } + + static PlatformBitmapRegisteredMapBitmap decode(Object result) { + result as List; + return PlatformBitmapRegisteredMapBitmap( + id: result[0]! as int, + ); + } +} + + class _PigeonCodec extends StandardMessageCodec { const _PigeonCodec(); @override @@ -1532,141 +1552,144 @@ class _PigeonCodec extends StandardMessageCodec { if (value is int) { buffer.putUint8(4); buffer.putInt64(value); - } else if (value is PlatformMapType) { + } else if (value is PlatformMapType) { buffer.putUint8(129); writeValue(buffer, value.index); - } else if (value is PlatformRendererType) { + } else if (value is PlatformRendererType) { buffer.putUint8(130); writeValue(buffer, value.index); - } else if (value is PlatformJointType) { + } else if (value is PlatformJointType) { buffer.putUint8(131); writeValue(buffer, value.index); - } else if (value is PlatformCapType) { + } else if (value is PlatformCapType) { buffer.putUint8(132); writeValue(buffer, value.index); - } else if (value is PlatformPatternItemType) { + } else if (value is PlatformPatternItemType) { buffer.putUint8(133); writeValue(buffer, value.index); - } else if (value is PlatformMapBitmapScaling) { + } else if (value is PlatformMapBitmapScaling) { buffer.putUint8(134); writeValue(buffer, value.index); - } else if (value is PlatformCameraPosition) { + } else if (value is PlatformCameraPosition) { buffer.putUint8(135); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdate) { + } else if (value is PlatformCameraUpdate) { buffer.putUint8(136); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateNewCameraPosition) { + } else if (value is PlatformCameraUpdateNewCameraPosition) { buffer.putUint8(137); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateNewLatLng) { + } else if (value is PlatformCameraUpdateNewLatLng) { buffer.putUint8(138); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateNewLatLngBounds) { + } else if (value is PlatformCameraUpdateNewLatLngBounds) { buffer.putUint8(139); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateNewLatLngZoom) { + } else if (value is PlatformCameraUpdateNewLatLngZoom) { buffer.putUint8(140); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateScrollBy) { + } else if (value is PlatformCameraUpdateScrollBy) { buffer.putUint8(141); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateZoomBy) { + } else if (value is PlatformCameraUpdateZoomBy) { buffer.putUint8(142); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateZoom) { + } else if (value is PlatformCameraUpdateZoom) { buffer.putUint8(143); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateZoomTo) { + } else if (value is PlatformCameraUpdateZoomTo) { buffer.putUint8(144); writeValue(buffer, value.encode()); - } else if (value is PlatformCircle) { + } else if (value is PlatformCircle) { buffer.putUint8(145); writeValue(buffer, value.encode()); - } else if (value is PlatformHeatmap) { + } else if (value is PlatformHeatmap) { buffer.putUint8(146); writeValue(buffer, value.encode()); - } else if (value is PlatformClusterManager) { + } else if (value is PlatformClusterManager) { buffer.putUint8(147); writeValue(buffer, value.encode()); - } else if (value is PlatformDoublePair) { + } else if (value is PlatformDoublePair) { buffer.putUint8(148); writeValue(buffer, value.encode()); - } else if (value is PlatformInfoWindow) { + } else if (value is PlatformInfoWindow) { buffer.putUint8(149); writeValue(buffer, value.encode()); - } else if (value is PlatformMarker) { + } else if (value is PlatformMarker) { buffer.putUint8(150); writeValue(buffer, value.encode()); - } else if (value is PlatformPolygon) { + } else if (value is PlatformPolygon) { buffer.putUint8(151); writeValue(buffer, value.encode()); - } else if (value is PlatformPolyline) { + } else if (value is PlatformPolyline) { buffer.putUint8(152); writeValue(buffer, value.encode()); - } else if (value is PlatformCap) { + } else if (value is PlatformCap) { buffer.putUint8(153); writeValue(buffer, value.encode()); - } else if (value is PlatformPatternItem) { + } else if (value is PlatformPatternItem) { buffer.putUint8(154); writeValue(buffer, value.encode()); - } else if (value is PlatformTile) { + } else if (value is PlatformTile) { buffer.putUint8(155); writeValue(buffer, value.encode()); - } else if (value is PlatformTileOverlay) { + } else if (value is PlatformTileOverlay) { buffer.putUint8(156); writeValue(buffer, value.encode()); - } else if (value is PlatformEdgeInsets) { + } else if (value is PlatformEdgeInsets) { buffer.putUint8(157); writeValue(buffer, value.encode()); - } else if (value is PlatformLatLng) { + } else if (value is PlatformLatLng) { buffer.putUint8(158); writeValue(buffer, value.encode()); - } else if (value is PlatformLatLngBounds) { + } else if (value is PlatformLatLngBounds) { buffer.putUint8(159); writeValue(buffer, value.encode()); - } else if (value is PlatformCluster) { + } else if (value is PlatformCluster) { buffer.putUint8(160); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraTargetBounds) { + } else if (value is PlatformCameraTargetBounds) { buffer.putUint8(161); writeValue(buffer, value.encode()); - } else if (value is PlatformMapViewCreationParams) { + } else if (value is PlatformMapViewCreationParams) { buffer.putUint8(162); writeValue(buffer, value.encode()); - } else if (value is PlatformMapConfiguration) { + } else if (value is PlatformMapConfiguration) { buffer.putUint8(163); writeValue(buffer, value.encode()); - } else if (value is PlatformPoint) { + } else if (value is PlatformPoint) { buffer.putUint8(164); writeValue(buffer, value.encode()); - } else if (value is PlatformTileLayer) { + } else if (value is PlatformTileLayer) { buffer.putUint8(165); writeValue(buffer, value.encode()); - } else if (value is PlatformZoomRange) { + } else if (value is PlatformZoomRange) { buffer.putUint8(166); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmap) { + } else if (value is PlatformBitmap) { buffer.putUint8(167); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapDefaultMarker) { + } else if (value is PlatformBitmapDefaultMarker) { buffer.putUint8(168); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapBytes) { + } else if (value is PlatformBitmapBytes) { buffer.putUint8(169); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapAsset) { + } else if (value is PlatformBitmapAsset) { buffer.putUint8(170); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapAssetImage) { + } else if (value is PlatformBitmapAssetImage) { buffer.putUint8(171); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapAssetMap) { + } else if (value is PlatformBitmapAssetMap) { buffer.putUint8(172); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapBytesMap) { + } else if (value is PlatformBitmapBytesMap) { buffer.putUint8(173); writeValue(buffer, value.encode()); + } else if (value is PlatformBitmapRegisteredMapBitmap) { + buffer.putUint8(174); + writeValue(buffer, value.encode()); } else { super.writeValue(buffer, value); } @@ -1675,102 +1698,104 @@ class _PigeonCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 129: + case 129: final int? value = readValue(buffer) as int?; return value == null ? null : PlatformMapType.values[value]; - case 130: + case 130: final int? value = readValue(buffer) as int?; return value == null ? null : PlatformRendererType.values[value]; - case 131: + case 131: final int? value = readValue(buffer) as int?; return value == null ? null : PlatformJointType.values[value]; - case 132: + case 132: final int? value = readValue(buffer) as int?; return value == null ? null : PlatformCapType.values[value]; - case 133: + case 133: final int? value = readValue(buffer) as int?; return value == null ? null : PlatformPatternItemType.values[value]; - case 134: + case 134: final int? value = readValue(buffer) as int?; return value == null ? null : PlatformMapBitmapScaling.values[value]; - case 135: + case 135: return PlatformCameraPosition.decode(readValue(buffer)!); - case 136: + case 136: return PlatformCameraUpdate.decode(readValue(buffer)!); - case 137: + case 137: return PlatformCameraUpdateNewCameraPosition.decode(readValue(buffer)!); - case 138: + case 138: return PlatformCameraUpdateNewLatLng.decode(readValue(buffer)!); - case 139: + case 139: return PlatformCameraUpdateNewLatLngBounds.decode(readValue(buffer)!); - case 140: + case 140: return PlatformCameraUpdateNewLatLngZoom.decode(readValue(buffer)!); - case 141: + case 141: return PlatformCameraUpdateScrollBy.decode(readValue(buffer)!); - case 142: + case 142: return PlatformCameraUpdateZoomBy.decode(readValue(buffer)!); - case 143: + case 143: return PlatformCameraUpdateZoom.decode(readValue(buffer)!); - case 144: + case 144: return PlatformCameraUpdateZoomTo.decode(readValue(buffer)!); - case 145: + case 145: return PlatformCircle.decode(readValue(buffer)!); - case 146: + case 146: return PlatformHeatmap.decode(readValue(buffer)!); - case 147: + case 147: return PlatformClusterManager.decode(readValue(buffer)!); - case 148: + case 148: return PlatformDoublePair.decode(readValue(buffer)!); - case 149: + case 149: return PlatformInfoWindow.decode(readValue(buffer)!); - case 150: + case 150: return PlatformMarker.decode(readValue(buffer)!); - case 151: + case 151: return PlatformPolygon.decode(readValue(buffer)!); - case 152: + case 152: return PlatformPolyline.decode(readValue(buffer)!); - case 153: + case 153: return PlatformCap.decode(readValue(buffer)!); - case 154: + case 154: return PlatformPatternItem.decode(readValue(buffer)!); - case 155: + case 155: return PlatformTile.decode(readValue(buffer)!); - case 156: + case 156: return PlatformTileOverlay.decode(readValue(buffer)!); - case 157: + case 157: return PlatformEdgeInsets.decode(readValue(buffer)!); - case 158: + case 158: return PlatformLatLng.decode(readValue(buffer)!); - case 159: + case 159: return PlatformLatLngBounds.decode(readValue(buffer)!); - case 160: + case 160: return PlatformCluster.decode(readValue(buffer)!); - case 161: + case 161: return PlatformCameraTargetBounds.decode(readValue(buffer)!); - case 162: + case 162: return PlatformMapViewCreationParams.decode(readValue(buffer)!); - case 163: + case 163: return PlatformMapConfiguration.decode(readValue(buffer)!); - case 164: + case 164: return PlatformPoint.decode(readValue(buffer)!); - case 165: + case 165: return PlatformTileLayer.decode(readValue(buffer)!); - case 166: + case 166: return PlatformZoomRange.decode(readValue(buffer)!); - case 167: + case 167: return PlatformBitmap.decode(readValue(buffer)!); - case 168: + case 168: return PlatformBitmapDefaultMarker.decode(readValue(buffer)!); - case 169: + case 169: return PlatformBitmapBytes.decode(readValue(buffer)!); - case 170: + case 170: return PlatformBitmapAsset.decode(readValue(buffer)!); - case 171: + case 171: return PlatformBitmapAssetImage.decode(readValue(buffer)!); - case 172: + case 172: return PlatformBitmapAssetMap.decode(readValue(buffer)!); - case 173: + case 173: return PlatformBitmapBytesMap.decode(readValue(buffer)!); + case 174: + return PlatformBitmapRegisteredMapBitmap.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); } @@ -1786,8 +1811,7 @@ class MapsApi { /// BinaryMessenger will be used which routes to the host platform. MapsApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) : pigeonVar_binaryMessenger = binaryMessenger, - pigeonVar_messageChannelSuffix = - messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; final BinaryMessenger? pigeonVar_binaryMessenger; static const MessageCodec pigeonChannelCodec = _PigeonCodec(); @@ -1796,10 +1820,8 @@ class MapsApi { /// Returns once the map instance is available. Future waitForMap() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.waitForMap$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.waitForMap$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -1823,18 +1845,15 @@ class MapsApi { /// /// Only non-null configuration values will result in updates; options with /// null values will remain unchanged. - Future updateMapConfiguration( - PlatformMapConfiguration configuration) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateMapConfiguration$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + Future updateMapConfiguration(PlatformMapConfiguration configuration) async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateMapConfiguration$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([configuration]) as List?; + final List? pigeonVar_replyList = + await pigeonVar_channel.send([configuration]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1849,18 +1868,15 @@ class MapsApi { } /// Updates the set of circles on the map. - Future updateCircles(List toAdd, - List toChange, List idsToRemove) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateCircles$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + Future updateCircles(List toAdd, List toChange, List idsToRemove) async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateCircles$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([toAdd, toChange, idsToRemove]) as List?; + final List? pigeonVar_replyList = + await pigeonVar_channel.send([toAdd, toChange, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1875,18 +1891,15 @@ class MapsApi { } /// Updates the set of heatmaps on the map. - Future updateHeatmaps(List toAdd, - List toChange, List idsToRemove) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateHeatmaps$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + Future updateHeatmaps(List toAdd, List toChange, List idsToRemove) async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateHeatmaps$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([toAdd, toChange, idsToRemove]) as List?; + final List? pigeonVar_replyList = + await pigeonVar_channel.send([toAdd, toChange, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1901,18 +1914,15 @@ class MapsApi { } /// Updates the set of custer managers for clusters on the map. - Future updateClusterManagers( - List toAdd, List idsToRemove) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateClusterManagers$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + Future updateClusterManagers(List toAdd, List idsToRemove) async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateClusterManagers$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([toAdd, idsToRemove]) as List?; + final List? pigeonVar_replyList = + await pigeonVar_channel.send([toAdd, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1927,18 +1937,15 @@ class MapsApi { } /// Updates the set of markers on the map. - Future updateMarkers(List toAdd, - List toChange, List idsToRemove) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateMarkers$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + Future updateMarkers(List toAdd, List toChange, List idsToRemove) async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateMarkers$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([toAdd, toChange, idsToRemove]) as List?; + final List? pigeonVar_replyList = + await pigeonVar_channel.send([toAdd, toChange, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1953,18 +1960,15 @@ class MapsApi { } /// Updates the set of polygonss on the map. - Future updatePolygons(List toAdd, - List toChange, List idsToRemove) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updatePolygons$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + Future updatePolygons(List toAdd, List toChange, List idsToRemove) async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updatePolygons$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([toAdd, toChange, idsToRemove]) as List?; + final List? pigeonVar_replyList = + await pigeonVar_channel.send([toAdd, toChange, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1979,18 +1983,15 @@ class MapsApi { } /// Updates the set of polylines on the map. - Future updatePolylines(List toAdd, - List toChange, List idsToRemove) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updatePolylines$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + Future updatePolylines(List toAdd, List toChange, List idsToRemove) async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updatePolylines$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([toAdd, toChange, idsToRemove]) as List?; + final List? pigeonVar_replyList = + await pigeonVar_channel.send([toAdd, toChange, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -2005,18 +2006,15 @@ class MapsApi { } /// Updates the set of tile overlays on the map. - Future updateTileOverlays(List toAdd, - List toChange, List idsToRemove) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateTileOverlays$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + Future updateTileOverlays(List toAdd, List toChange, List idsToRemove) async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateTileOverlays$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([toAdd, toChange, idsToRemove]) as List?; + final List? pigeonVar_replyList = + await pigeonVar_channel.send([toAdd, toChange, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -2032,10 +2030,8 @@ class MapsApi { /// Gets the screen coordinate for the given map location. Future getScreenCoordinate(PlatformLatLng latLng) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getScreenCoordinate$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getScreenCoordinate$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2062,16 +2058,14 @@ class MapsApi { /// Gets the map location for the given screen coordinate. Future getLatLng(PlatformPoint screenCoordinate) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getLatLng$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getLatLng$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([screenCoordinate]) as List?; + final List? pigeonVar_replyList = + await pigeonVar_channel.send([screenCoordinate]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -2092,10 +2086,8 @@ class MapsApi { /// Gets the map region currently displayed on the map. Future getVisibleRegion() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getVisibleRegion$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getVisibleRegion$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2123,10 +2115,8 @@ class MapsApi { /// Moves the camera according to [cameraUpdate] immediately, with no /// animation. Future moveCamera(PlatformCameraUpdate cameraUpdate) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.moveCamera$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.moveCamera$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2148,10 +2138,8 @@ class MapsApi { /// Moves the camera according to [cameraUpdate], animating the update. Future animateCamera(PlatformCameraUpdate cameraUpdate) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.animateCamera$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.animateCamera$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2173,10 +2161,8 @@ class MapsApi { /// Gets the current map zoom level. Future getZoomLevel() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getZoomLevel$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getZoomLevel$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2203,10 +2189,8 @@ class MapsApi { /// Show the info window for the marker with the given ID. Future showInfoWindow(String markerId) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.showInfoWindow$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.showInfoWindow$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2228,10 +2212,8 @@ class MapsApi { /// Hide the info window for the marker with the given ID. Future hideInfoWindow(String markerId) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.hideInfoWindow$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.hideInfoWindow$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2254,10 +2236,8 @@ class MapsApi { /// Returns true if the marker with the given ID is currently displaying its /// info window. Future isInfoWindowShown(String markerId) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.isInfoWindowShown$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.isInfoWindowShown$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2288,10 +2268,8 @@ class MapsApi { /// Returns false if there was an error setting the style, such as an invalid /// style string. Future setStyle(String style) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.setStyle$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.setStyle$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2322,10 +2300,8 @@ class MapsApi { /// This allows checking asynchronously for initial style failures, as there /// is no way to return failures from map initialization. Future didLastStyleSucceed() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.didLastStyleSucceed$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.didLastStyleSucceed$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2352,16 +2328,14 @@ class MapsApi { /// Clears the cache of tiles previously requseted from the tile provider. Future clearTileCache(String tileOverlayId) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.clearTileCache$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.clearTileCache$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([tileOverlayId]) as List?; + final List? pigeonVar_replyList = + await pigeonVar_channel.send([tileOverlayId]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -2377,10 +2351,8 @@ class MapsApi { /// Takes a snapshot of the map and returns its image data. Future takeSnapshot() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.takeSnapshot$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.takeSnapshot$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2452,22 +2424,13 @@ abstract class MapsCallbackApi { void onPolylineTap(String polylineId); /// Called to get data for a map tile. - Future getTileOverlayTile( - String tileOverlayId, PlatformPoint location, int zoom); - - static void setUp( - MapsCallbackApi? api, { - BinaryMessenger? binaryMessenger, - String messageChannelSuffix = '', - }) { - messageChannelSuffix = - messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + Future getTileOverlayTile(String tileOverlayId, PlatformPoint location, int zoom); + + static void setUp(MapsCallbackApi? api, {BinaryMessenger? binaryMessenger, String messageChannelSuffix = '',}) { + messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraMoveStarted$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraMoveStarted$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); @@ -2478,29 +2441,24 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraMove$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraMove$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraMove was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraMove was null.'); final List args = (message as List?)!; - final PlatformCameraPosition? arg_cameraPosition = - (args[0] as PlatformCameraPosition?); + final PlatformCameraPosition? arg_cameraPosition = (args[0] as PlatformCameraPosition?); assert(arg_cameraPosition != null, 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraMove was null, expected non-null PlatformCameraPosition.'); try { @@ -2508,19 +2466,15 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraIdle$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraIdle$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); @@ -2531,26 +2485,22 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onTap$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onTap$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onTap was null.'); final List args = (message as List?)!; final PlatformLatLng? arg_position = (args[0] as PlatformLatLng?); assert(arg_position != null, @@ -2560,26 +2510,22 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onLongPress$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onLongPress$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onLongPress was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onLongPress was null.'); final List args = (message as List?)!; final PlatformLatLng? arg_position = (args[0] as PlatformLatLng?); assert(arg_position != null, @@ -2589,26 +2535,22 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerTap$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerTap$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerTap was null.'); final List args = (message as List?)!; final String? arg_markerId = (args[0] as String?); assert(arg_markerId != null, @@ -2618,26 +2560,22 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDragStart$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDragStart$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDragStart was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDragStart was null.'); final List args = (message as List?)!; final String? arg_markerId = (args[0] as String?); assert(arg_markerId != null, @@ -2650,26 +2588,22 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDrag$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDrag$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDrag was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDrag was null.'); final List args = (message as List?)!; final String? arg_markerId = (args[0] as String?); assert(arg_markerId != null, @@ -2682,26 +2616,22 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDragEnd$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDragEnd$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDragEnd was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDragEnd was null.'); final List args = (message as List?)!; final String? arg_markerId = (args[0] as String?); assert(arg_markerId != null, @@ -2714,26 +2644,22 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onInfoWindowTap$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onInfoWindowTap$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onInfoWindowTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onInfoWindowTap was null.'); final List args = (message as List?)!; final String? arg_markerId = (args[0] as String?); assert(arg_markerId != null, @@ -2743,26 +2669,22 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCircleTap$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCircleTap$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCircleTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCircleTap was null.'); final List args = (message as List?)!; final String? arg_circleId = (args[0] as String?); assert(arg_circleId != null, @@ -2772,26 +2694,22 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onClusterTap$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onClusterTap$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onClusterTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onClusterTap was null.'); final List args = (message as List?)!; final PlatformCluster? arg_cluster = (args[0] as PlatformCluster?); assert(arg_cluster != null, @@ -2801,26 +2719,22 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onPolygonTap$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onPolygonTap$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onPolygonTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onPolygonTap was null.'); final List args = (message as List?)!; final String? arg_polygonId = (args[0] as String?); assert(arg_polygonId != null, @@ -2830,26 +2744,22 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onPolylineTap$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onPolylineTap$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onPolylineTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onPolylineTap was null.'); final List args = (message as List?)!; final String? arg_polylineId = (args[0] as String?); assert(arg_polylineId != null, @@ -2859,26 +2769,22 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.getTileOverlayTile$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.getTileOverlayTile$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.getTileOverlayTile was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.getTileOverlayTile was null.'); final List args = (message as List?)!; final String? arg_tileOverlayId = (args[0] as String?); assert(arg_tileOverlayId != null, @@ -2890,14 +2796,12 @@ abstract class MapsCallbackApi { assert(arg_zoom != null, 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.getTileOverlayTile was null, expected non-null int.'); try { - final PlatformTile output = await api.getTileOverlayTile( - arg_tileOverlayId!, arg_location!, arg_zoom!); + final PlatformTile output = await api.getTileOverlayTile(arg_tileOverlayId!, arg_location!, arg_zoom!); return wrapResponse(result: output); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } @@ -2910,11 +2814,9 @@ class MapsInitializerApi { /// Constructor for [MapsInitializerApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - MapsInitializerApi( - {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + MapsInitializerApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) : pigeonVar_binaryMessenger = binaryMessenger, - pigeonVar_messageChannelSuffix = - messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; final BinaryMessenger? pigeonVar_binaryMessenger; static const MessageCodec pigeonChannelCodec = _PigeonCodec(); @@ -2927,12 +2829,9 @@ class MapsInitializerApi { /// /// Calling this more than once in the lifetime of an application will result /// in an error. - Future initializeWithPreferredRenderer( - PlatformRendererType? type) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsInitializerApi.initializeWithPreferredRenderer$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + Future initializeWithPreferredRenderer(PlatformRendererType? type) async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInitializerApi.initializeWithPreferredRenderer$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2965,11 +2864,9 @@ class MapsPlatformViewApi { /// Constructor for [MapsPlatformViewApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - MapsPlatformViewApi( - {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + MapsPlatformViewApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) : pigeonVar_binaryMessenger = binaryMessenger, - pigeonVar_messageChannelSuffix = - messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; final BinaryMessenger? pigeonVar_binaryMessenger; static const MessageCodec pigeonChannelCodec = _PigeonCodec(); @@ -2977,10 +2874,8 @@ class MapsPlatformViewApi { final String pigeonVar_messageChannelSuffix; Future createView(PlatformMapViewCreationParams? type) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsPlatformViewApi.createView$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsPlatformViewApi.createView$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3006,11 +2901,9 @@ class MapsInspectorApi { /// Constructor for [MapsInspectorApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - MapsInspectorApi( - {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + MapsInspectorApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) : pigeonVar_binaryMessenger = binaryMessenger, - pigeonVar_messageChannelSuffix = - messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; final BinaryMessenger? pigeonVar_binaryMessenger; static const MessageCodec pigeonChannelCodec = _PigeonCodec(); @@ -3018,10 +2911,8 @@ class MapsInspectorApi { final String pigeonVar_messageChannelSuffix; Future areBuildingsEnabled() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areBuildingsEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areBuildingsEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3047,10 +2938,8 @@ class MapsInspectorApi { } Future areRotateGesturesEnabled() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areRotateGesturesEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areRotateGesturesEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3076,10 +2965,8 @@ class MapsInspectorApi { } Future areZoomControlsEnabled() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areZoomControlsEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areZoomControlsEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3105,10 +2992,8 @@ class MapsInspectorApi { } Future areScrollGesturesEnabled() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areScrollGesturesEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areScrollGesturesEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3134,10 +3019,8 @@ class MapsInspectorApi { } Future areTiltGesturesEnabled() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areTiltGesturesEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areTiltGesturesEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3163,10 +3046,8 @@ class MapsInspectorApi { } Future areZoomGesturesEnabled() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areZoomGesturesEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areZoomGesturesEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3192,10 +3073,8 @@ class MapsInspectorApi { } Future isCompassEnabled() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isCompassEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isCompassEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3221,10 +3100,8 @@ class MapsInspectorApi { } Future isLiteModeEnabled() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isLiteModeEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isLiteModeEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3245,10 +3122,8 @@ class MapsInspectorApi { } Future isMapToolbarEnabled() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isMapToolbarEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isMapToolbarEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3274,10 +3149,8 @@ class MapsInspectorApi { } Future isMyLocationButtonEnabled() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isMyLocationButtonEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isMyLocationButtonEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3303,10 +3176,8 @@ class MapsInspectorApi { } Future isTrafficEnabled() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isTrafficEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isTrafficEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3332,16 +3203,14 @@ class MapsInspectorApi { } Future getTileOverlayInfo(String tileOverlayId) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.getTileOverlayInfo$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.getTileOverlayInfo$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([tileOverlayId]) as List?; + final List? pigeonVar_replyList = + await pigeonVar_channel.send([tileOverlayId]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -3356,10 +3225,8 @@ class MapsInspectorApi { } Future getZoomRange() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.getZoomRange$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.getZoomRange$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3385,16 +3252,14 @@ class MapsInspectorApi { } Future> getClusters(String clusterManagerId) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.getClusters$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.getClusters$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([clusterManagerId]) as List?; + final List? pigeonVar_replyList = + await pigeonVar_channel.send([clusterManagerId]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -3409,8 +3274,91 @@ class MapsInspectorApi { message: 'Host platform returned null value for non-null return value.', ); } else { - return (pigeonVar_replyList[0] as List?)! - .cast(); + return (pigeonVar_replyList[0] as List?)!.cast(); + } + } +} + +/// API for interacting with the image registry. +class ImageRegistryApi { + /// Constructor for [ImageRegistryApi]. The [binaryMessenger] named argument is + /// available for dependency injection. If it is left null, the default + /// BinaryMessenger will be used which routes to the host platform. + ImageRegistryApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + : pigeonVar_binaryMessenger = binaryMessenger, + pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + final BinaryMessenger? pigeonVar_binaryMessenger; + + static const MessageCodec pigeonChannelCodec = _PigeonCodec(); + + final String pigeonVar_messageChannelSuffix; + + /// Adds a bitmap to the cache. + Future addBitmapToCache(int id, PlatformBitmap bitmap) async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.ImageRegistryApi.addBitmapToCache$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([id, bitmap]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Retrieves a bitmap from the cache. + Future removeBitmapFromCache(int id) async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.ImageRegistryApi.removeBitmapFromCache$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([id]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Clears the bitmap cache. + Future clearBitmapCache() async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.ImageRegistryApi.clearBitmapCache$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send(null) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; } } } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/pigeons/messages.dart b/packages/google_maps_flutter/google_maps_flutter_android/pigeons/messages.dart index 9db93e75314..2e6cd323bf1 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/pigeons/messages.dart +++ b/packages/google_maps_flutter/google_maps_flutter_android/pigeons/messages.dart @@ -588,6 +588,15 @@ class PlatformBitmapBytesMap { final double? height; } +/// Pigeon equivalent of a registered bitmap. +class PlatformBitmapRegisteredMapBitmap { + PlatformBitmapRegisteredMapBitmap({ + required this.id, + }); + + final int id; +} + /// Interface for non-test interactions with the native SDK. /// /// For test-only state queries, see [MapsInspectorApi]. @@ -773,3 +782,16 @@ abstract class MapsInspectorApi { PlatformZoomRange getZoomRange(); List getClusters(String clusterManagerId); } + +/// API for interacting with the image registry. +@HostApi() +abstract class ImageRegistryApi { + /// Adds a bitmap to the cache. + void addBitmapToCache(int id, PlatformBitmap bitmap); + + /// Retrieves a bitmap from the cache. + void removeBitmapFromCache(int id); + + /// Clears the bitmap cache. + void clearBitmapCache(); +} diff --git a/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml index 19db56e1913..c8ac0fbd287 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml @@ -37,3 +37,8 @@ topics: - google-maps - google-maps-flutter - map + +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + {google_maps_flutter_platform_interface: {path: ../../../packages/google_maps_flutter/google_maps_flutter_platform_interface}} diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/pubspec.yaml index f0a24119282..4f8dd3f0ec2 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/pubspec.yaml @@ -32,3 +32,8 @@ flutter: uses-material-design: true assets: - assets/ + +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + {google_maps_flutter_platform_interface: {path: ../../../../../packages/google_maps_flutter/google_maps_flutter_platform_interface}} diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios15/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios15/pubspec.yaml index f0a24119282..4f8dd3f0ec2 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios15/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios15/pubspec.yaml @@ -32,3 +32,8 @@ flutter: uses-material-design: true assets: - assets/ + +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + {google_maps_flutter_platform_interface: {path: ../../../../../packages/google_maps_flutter/google_maps_flutter_platform_interface}} diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/shared/maps_example_dart/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_ios/example/shared/maps_example_dart/pubspec.yaml index 9e6466288a9..83e95981dd3 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/shared/maps_example_dart/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/shared/maps_example_dart/pubspec.yaml @@ -27,3 +27,8 @@ dev_dependencies: flutter: uses-material-design: true + +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + {google_maps_flutter_platform_interface: {path: ../../../../../../packages/google_maps_flutter/google_maps_flutter_platform_interface}} diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.h b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.h index cc69bcd39f2..6bb5593aa40 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.h +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.h @@ -11,6 +11,7 @@ #import "GoogleMapMarkerController.h" #import "GoogleMapPolygonController.h" #import "GoogleMapPolylineController.h" +#import "ImageRegistry.h" NS_ASSUME_NONNULL_BEGIN diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.m index 0108a3f72b2..fcf46132958 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.m @@ -11,6 +11,7 @@ #import "FLTGoogleMapJSONConversions.h" #import "FLTGoogleMapTileOverlayController.h" #import "messages.g.h" +#import "ImageRegistry.h" #pragma mark - Conversion of JSON-like values sent via platform channels. Forward declarations. @@ -159,17 +160,20 @@ - (instancetype)initWithFrame:(CGRect)frame } GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options]; + ImageRegistry *imageRegistry = [[ImageRegistry alloc] initWithRegistrar:registrar]; return [self initWithMapView:mapView viewIdentifier:viewId creationParameters:creationParameters - registrar:registrar]; + registrar:registrar + imageRegistry:imageRegistry]; } - (instancetype)initWithMapView:(GMSMapView *_Nonnull)mapView viewIdentifier:(int64_t)viewId creationParameters:(FGMPlatformMapViewCreationParams *)creationParameters - registrar:(NSObject *_Nonnull)registrar { + registrar:(NSObject *_Nonnull)registrar + imageRegistry:(ImageRegistry *)imageRegistry { if (self = [super init]) { _mapView = mapView; @@ -189,7 +193,8 @@ - (instancetype)initWithMapView:(GMSMapView *_Nonnull)mapView _markersController = [[FLTMarkersController alloc] initWithMapView:_mapView callbackHandler:_dartCallbackHandler clusterManagersController:_clusterManagersController - registrar:registrar]; + registrar:registrar + imageRegistry:imageRegistry]; _polygonsController = [[FLTPolygonsController alloc] initWithMapView:_mapView callbackHandler:_dartCallbackHandler registrar:registrar]; @@ -221,6 +226,7 @@ - (instancetype)initWithMapView:(GMSMapView *_Nonnull)mapView messenger:registrar.messenger pigeonSuffix:pigeonSuffix]; SetUpFGMMapsApiWithSuffix(registrar.messenger, _callHandler, pigeonSuffix); + SetUpFGMImageRegistryApi(registrar.messenger, imageRegistry); _inspector = [[FGMMapInspector alloc] initWithMapController:self messenger:registrar.messenger pigeonSuffix:pigeonSuffix]; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.h b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.h index 3b090a3ed02..66e9e64c3a7 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.h +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.h @@ -8,6 +8,7 @@ #import "FGMClusterManagersController.h" #import "GoogleMapController.h" #import "messages.g.h" +#import "ImageRegistry.h" NS_ASSUME_NONNULL_BEGIN @@ -22,13 +23,18 @@ NS_ASSUME_NONNULL_BEGIN - (void)hideInfoWindow; - (BOOL)isInfoWindowShown; - (void)removeMarker; ++ (UIImage *)iconFromBitmap:(FGMPlatformBitmap *)platformBitmap + registrar:(NSObject *)registrar + screenScale:(CGFloat)screenScale + imageRegistry:(ImageRegistry *)imageRegistry; @end @interface FLTMarkersController : NSObject - (instancetype)initWithMapView:(GMSMapView *)mapView callbackHandler:(FGMMapsCallbackApi *)callbackHandler clusterManagersController:(nullable FGMClusterManagersController *)clusterManagersController - registrar:(NSObject *)registrar; + registrar:(NSObject *)registrar + imageRegistry:(ImageRegistry *)imageRegistry; - (void)addMarkers:(NSArray *)markersToAdd; - (void)changeMarkers:(NSArray *)markersToChange; - (void)removeMarkersWithIdentifiers:(NSArray *)identifiers; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.m index cfbc9392159..328aa444df0 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.m @@ -6,6 +6,7 @@ #import "FGMMarkerUserData.h" #import "FLTGoogleMapJSONConversions.h" +#import "ImageRegistry.h" @interface FLTGoogleMapMarkerController () @@ -108,13 +109,15 @@ - (void)setZIndex:(int)zIndex { - (void)updateFromPlatformMarker:(FGMPlatformMarker *)platformMarker registrar:(NSObject *)registrar - screenScale:(CGFloat)screenScale { + screenScale:(CGFloat)screenScale + imageRegistry:(ImageRegistry *)imageRegistry { [self setAlpha:platformMarker.alpha]; [self setAnchor:FGMGetCGPointForPigeonPoint(platformMarker.anchor)]; [self setDraggable:platformMarker.draggable]; - UIImage *image = [self iconFromBitmap:platformMarker.icon + UIImage *image = [FLTGoogleMapMarkerController iconFromBitmap:platformMarker.icon registrar:registrar - screenScale:screenScale]; + screenScale:screenScale + imageRegistry:imageRegistry]; [self setIcon:image]; [self setFlat:platformMarker.flat]; [self setConsumeTapEvents:platformMarker.consumeTapEvents]; @@ -139,15 +142,21 @@ - (void)interpretInfoWindow:(NSDictionary *)data { } } -- (UIImage *)iconFromBitmap:(FGMPlatformBitmap *)platformBitmap ++ (UIImage *)iconFromBitmap:(FGMPlatformBitmap *)platformBitmap registrar:(NSObject *)registrar - screenScale:(CGFloat)screenScale { + screenScale:(CGFloat)screenScale + imageRegistry:(ImageRegistry *)imageRegistry { NSAssert(screenScale > 0, @"Screen scale must be greater than 0"); // See comment in messages.dart for why this is so loosely typed. See also // https://github.com/flutter/flutter/issues/117819. id bitmap = platformBitmap.bitmap; UIImage *image; - if ([bitmap isKindOfClass:[FGMPlatformBitmapDefaultMarker class]]) { + if ([bitmap isKindOfClass:[FGMPlatformBitmapRegisteredMapBitmap class]]) { + FGMPlatformBitmapRegisteredMapBitmap *registeredBitmap = bitmap; + NSInteger imageId = registeredBitmap.id; + NSNumber *imageIdNumber = [NSNumber numberWithInteger:imageId]; + return [imageRegistry getBitmap:imageIdNumber]; + } else if ([bitmap isKindOfClass:[FGMPlatformBitmapDefaultMarker class]]) { FGMPlatformBitmapDefaultMarker *bitmapDefaultMarker = bitmap; CGFloat hue = bitmapDefaultMarker.hue.doubleValue; image = [GMSMarker markerImageWithColor:[UIColor colorWithHue:hue / 360.0 @@ -240,7 +249,7 @@ - (UIImage *)iconFromBitmap:(FGMPlatformBitmap *)platformBitmap /// flutter google_maps_flutter_platform_interface package which has been replaced by 'bytes' /// message handling. It will be removed when the deprecated image bitmap description type /// 'fromBytes' is removed from the platform interface. -- (UIImage *)scaleImage:(UIImage *)image by:(double)scale { ++ (UIImage *)scaleImage:(UIImage *)image by:(double)scale { if (fabs(scale - 1) > 1e-3) { return [UIImage imageWithCGImage:[image CGImage] scale:(image.scale * scale) @@ -379,6 +388,7 @@ @interface FLTMarkersController () /// Controller for adding/removing/fetching cluster managers @property(weak, nonatomic, nullable) FGMClusterManagersController *clusterManagersController; @property(weak, nonatomic) NSObject *registrar; +@property(copy, nonatomic) ImageRegistry *imageRegistry; @property(weak, nonatomic) GMSMapView *mapView; @end @@ -388,7 +398,8 @@ @implementation FLTMarkersController - (instancetype)initWithMapView:(GMSMapView *)mapView callbackHandler:(FGMMapsCallbackApi *)callbackHandler clusterManagersController:(nullable FGMClusterManagersController *)clusterManagersController - registrar:(NSObject *)registrar { + registrar:(NSObject *)registrar + imageRegistry:(ImageRegistry *)imageRegistry { self = [super init]; if (self) { _callbackHandler = callbackHandler; @@ -396,6 +407,7 @@ - (instancetype)initWithMapView:(GMSMapView *)mapView _clusterManagersController = clusterManagersController; _markerIdentifierToController = [[NSMutableDictionary alloc] init]; _registrar = registrar; + _imageRegistry = imageRegistry; } return self; } @@ -418,7 +430,8 @@ - (void)addMarker:(FGMPlatformMarker *)markerToAdd { mapView:self.mapView]; [controller updateFromPlatformMarker:markerToAdd registrar:self.registrar - screenScale:[self getScreenScale]]; + screenScale:[self getScreenScale] + imageRegistry:self.imageRegistry]; if (clusterManagerIdentifier) { GMUClusterManager *clusterManager = [_clusterManagersController clusterManagerWithIdentifier:clusterManagerIdentifier]; @@ -450,7 +463,8 @@ - (void)changeMarker:(FGMPlatformMarker *)markerToChange { } else { [controller updateFromPlatformMarker:markerToChange registrar:self.registrar - screenScale:[self getScreenScale]]; + screenScale:[self getScreenScale] + imageRegistry:self.imageRegistry]; } } diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/ImageRegistry.h b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/ImageRegistry.h new file mode 100644 index 00000000000..14abfa0e410 --- /dev/null +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/ImageRegistry.h @@ -0,0 +1,18 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import +#import + +#import "messages.g.h" + +@interface ImageRegistry : NSObject + +- (instancetype)init; + +- (instancetype)initWithRegistrar:(NSObject *)registrar; + +- (UIImage *)getBitmap:(NSNumber *)identifier; + +@end diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/ImageRegistry.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/ImageRegistry.m new file mode 100644 index 00000000000..9a21f302d8c --- /dev/null +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/ImageRegistry.m @@ -0,0 +1,53 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "ImageRegistry.h" +#import "GoogleMapMarkerController.h" + +@interface ImageRegistry () + +@property (nonatomic, strong) NSMutableDictionary *registry; +@property(weak, nonatomic) NSObject *registrar; + +@end + +@implementation ImageRegistry + +- (instancetype)initWithRegistrar:(NSObject *)registrar { + self = [super init]; + if (self) { + _registrar = registrar; + _registry = [[NSMutableDictionary alloc] init]; + } + return self; +} + +- (instancetype)init { + return [self initWithRegistrar:nil]; +} + +- (void)addBitmapToCacheId:(NSInteger)id bitmap:(nonnull FGMPlatformBitmap *)bitmap error:(FlutterError * _Nullable __autoreleasing * _Nonnull)error { + CGFloat screenScale = [[UIScreen mainScreen] scale]; + UIImage *image = [FLTGoogleMapMarkerController iconFromBitmap:bitmap + registrar:_registrar + screenScale:screenScale + imageRegistry:self]; + NSNumber *idNumber = [NSNumber numberWithInteger:id]; + [self.registry setObject:image forKey:idNumber]; +} + +- (void)removeBitmapFromCacheId:(NSInteger)id error:(FlutterError * _Nullable __autoreleasing * _Nonnull)error { + NSNumber *idNumber = [NSNumber numberWithInteger:id]; + [self.registry removeObjectForKey:idNumber]; +} + +- (void)clearBitmapCacheWithError:(FlutterError * _Nullable __autoreleasing * _Nonnull)error { + [self.registry removeAllObjects]; +} + +- (UIImage *)getBitmap:(NSNumber *)identifier { + return self.registry[identifier]; +} + +@end diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.h b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.h index b8c1bb5c35d..e15c1d0fa25 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.h +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.h @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v22.6.1), do not edit directly. +// Autogenerated from Pigeon (v22.7.2), do not edit directly. // See also: https://pub.dev/packages/pigeon #import @@ -104,31 +104,32 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { @class FGMPlatformBitmapAssetImage; @class FGMPlatformBitmapAssetMap; @class FGMPlatformBitmapBytesMap; +@class FGMPlatformBitmapRegisteredMapBitmap; /// Pigeon representatation of a CameraPosition. @interface FGMPlatformCameraPosition : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithBearing:(double)bearing - target:(FGMPlatformLatLng *)target - tilt:(double)tilt - zoom:(double)zoom; -@property(nonatomic, assign) double bearing; -@property(nonatomic, strong) FGMPlatformLatLng *target; -@property(nonatomic, assign) double tilt; -@property(nonatomic, assign) double zoom; ++ (instancetype)makeWithBearing:(double )bearing + target:(FGMPlatformLatLng *)target + tilt:(double )tilt + zoom:(double )zoom; +@property(nonatomic, assign) double bearing; +@property(nonatomic, strong) FGMPlatformLatLng * target; +@property(nonatomic, assign) double tilt; +@property(nonatomic, assign) double zoom; @end /// Pigeon representation of a CameraUpdate. @interface FGMPlatformCameraUpdate : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithCameraUpdate:(id)cameraUpdate; ++ (instancetype)makeWithCameraUpdate:(id )cameraUpdate; /// This Object must be one of the classes below prefixed with /// PlatformCameraUpdate. Each such class represents a different type of /// camera update, and each holds a different set of data, preventing the /// use of a single unified class. -@property(nonatomic, strong) id cameraUpdate; +@property(nonatomic, strong) id cameraUpdate; @end /// Pigeon equivalent of NewCameraPosition @@ -136,7 +137,7 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithCameraPosition:(FGMPlatformCameraPosition *)cameraPosition; -@property(nonatomic, strong) FGMPlatformCameraPosition *cameraPosition; +@property(nonatomic, strong) FGMPlatformCameraPosition * cameraPosition; @end /// Pigeon equivalent of NewLatLng @@ -144,94 +145,98 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithLatLng:(FGMPlatformLatLng *)latLng; -@property(nonatomic, strong) FGMPlatformLatLng *latLng; +@property(nonatomic, strong) FGMPlatformLatLng * latLng; @end /// Pigeon equivalent of NewLatLngBounds @interface FGMPlatformCameraUpdateNewLatLngBounds : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithBounds:(FGMPlatformLatLngBounds *)bounds padding:(double)padding; -@property(nonatomic, strong) FGMPlatformLatLngBounds *bounds; -@property(nonatomic, assign) double padding; ++ (instancetype)makeWithBounds:(FGMPlatformLatLngBounds *)bounds + padding:(double )padding; +@property(nonatomic, strong) FGMPlatformLatLngBounds * bounds; +@property(nonatomic, assign) double padding; @end /// Pigeon equivalent of NewLatLngZoom @interface FGMPlatformCameraUpdateNewLatLngZoom : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithLatLng:(FGMPlatformLatLng *)latLng zoom:(double)zoom; -@property(nonatomic, strong) FGMPlatformLatLng *latLng; -@property(nonatomic, assign) double zoom; ++ (instancetype)makeWithLatLng:(FGMPlatformLatLng *)latLng + zoom:(double )zoom; +@property(nonatomic, strong) FGMPlatformLatLng * latLng; +@property(nonatomic, assign) double zoom; @end /// Pigeon equivalent of ScrollBy @interface FGMPlatformCameraUpdateScrollBy : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithDx:(double)dx dy:(double)dy; -@property(nonatomic, assign) double dx; -@property(nonatomic, assign) double dy; ++ (instancetype)makeWithDx:(double )dx + dy:(double )dy; +@property(nonatomic, assign) double dx; +@property(nonatomic, assign) double dy; @end /// Pigeon equivalent of ZoomBy @interface FGMPlatformCameraUpdateZoomBy : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithAmount:(double)amount focus:(nullable FGMPlatformPoint *)focus; -@property(nonatomic, assign) double amount; -@property(nonatomic, strong, nullable) FGMPlatformPoint *focus; ++ (instancetype)makeWithAmount:(double )amount + focus:(nullable FGMPlatformPoint *)focus; +@property(nonatomic, assign) double amount; +@property(nonatomic, strong, nullable) FGMPlatformPoint * focus; @end /// Pigeon equivalent of ZoomIn/ZoomOut @interface FGMPlatformCameraUpdateZoom : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithOut:(BOOL)out; -@property(nonatomic, assign) BOOL out; ++ (instancetype)makeWithOut:(BOOL )out; +@property(nonatomic, assign) BOOL out; @end /// Pigeon equivalent of ZoomTo @interface FGMPlatformCameraUpdateZoomTo : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithZoom:(double)zoom; -@property(nonatomic, assign) double zoom; ++ (instancetype)makeWithZoom:(double )zoom; +@property(nonatomic, assign) double zoom; @end /// Pigeon equivalent of the Circle class. @interface FGMPlatformCircle : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithConsumeTapEvents:(BOOL)consumeTapEvents - fillColor:(NSInteger)fillColor - strokeColor:(NSInteger)strokeColor - visible:(BOOL)visible - strokeWidth:(NSInteger)strokeWidth - zIndex:(double)zIndex - center:(FGMPlatformLatLng *)center - radius:(double)radius - circleId:(NSString *)circleId; -@property(nonatomic, assign) BOOL consumeTapEvents; -@property(nonatomic, assign) NSInteger fillColor; -@property(nonatomic, assign) NSInteger strokeColor; -@property(nonatomic, assign) BOOL visible; -@property(nonatomic, assign) NSInteger strokeWidth; -@property(nonatomic, assign) double zIndex; -@property(nonatomic, strong) FGMPlatformLatLng *center; -@property(nonatomic, assign) double radius; -@property(nonatomic, copy) NSString *circleId; ++ (instancetype)makeWithConsumeTapEvents:(BOOL )consumeTapEvents + fillColor:(NSInteger )fillColor + strokeColor:(NSInteger )strokeColor + visible:(BOOL )visible + strokeWidth:(NSInteger )strokeWidth + zIndex:(double )zIndex + center:(FGMPlatformLatLng *)center + radius:(double )radius + circleId:(NSString *)circleId; +@property(nonatomic, assign) BOOL consumeTapEvents; +@property(nonatomic, assign) NSInteger fillColor; +@property(nonatomic, assign) NSInteger strokeColor; +@property(nonatomic, assign) BOOL visible; +@property(nonatomic, assign) NSInteger strokeWidth; +@property(nonatomic, assign) double zIndex; +@property(nonatomic, strong) FGMPlatformLatLng * center; +@property(nonatomic, assign) double radius; +@property(nonatomic, copy) NSString * circleId; @end /// Pigeon equivalent of the Heatmap class. @interface FGMPlatformHeatmap : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithJson:(id)json; ++ (instancetype)makeWithJson:(id )json; /// The heatmap data, as JSON. This should only be set from /// Heatmap.toJson, and the native code must interpret it according to the /// internal implementation details of that method. -@property(nonatomic, strong) id json; +@property(nonatomic, strong) id json; @end /// Pigeon equivalent of the InfoWindow class. @@ -239,11 +244,11 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithTitle:(nullable NSString *)title - snippet:(nullable NSString *)snippet - anchor:(FGMPlatformPoint *)anchor; -@property(nonatomic, copy, nullable) NSString *title; -@property(nonatomic, copy, nullable) NSString *snippet; -@property(nonatomic, strong) FGMPlatformPoint *anchor; + snippet:(nullable NSString *)snippet + anchor:(FGMPlatformPoint *)anchor; +@property(nonatomic, copy, nullable) NSString * title; +@property(nonatomic, copy, nullable) NSString * snippet; +@property(nonatomic, strong) FGMPlatformPoint * anchor; @end /// Pigeon equivalent of Cluster. @@ -251,13 +256,13 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithClusterManagerId:(NSString *)clusterManagerId - position:(FGMPlatformLatLng *)position - bounds:(FGMPlatformLatLngBounds *)bounds - markerIds:(NSArray *)markerIds; -@property(nonatomic, copy) NSString *clusterManagerId; -@property(nonatomic, strong) FGMPlatformLatLng *position; -@property(nonatomic, strong) FGMPlatformLatLngBounds *bounds; -@property(nonatomic, copy) NSArray *markerIds; + position:(FGMPlatformLatLng *)position + bounds:(FGMPlatformLatLngBounds *)bounds + markerIds:(NSArray *)markerIds; +@property(nonatomic, copy) NSString * clusterManagerId; +@property(nonatomic, strong) FGMPlatformLatLng * position; +@property(nonatomic, strong) FGMPlatformLatLngBounds * bounds; +@property(nonatomic, copy) NSArray * markerIds; @end /// Pigeon equivalent of the ClusterManager class. @@ -265,39 +270,39 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithIdentifier:(NSString *)identifier; -@property(nonatomic, copy) NSString *identifier; +@property(nonatomic, copy) NSString * identifier; @end /// Pigeon equivalent of the Marker class. @interface FGMPlatformMarker : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithAlpha:(double)alpha - anchor:(FGMPlatformPoint *)anchor - consumeTapEvents:(BOOL)consumeTapEvents - draggable:(BOOL)draggable - flat:(BOOL)flat - icon:(FGMPlatformBitmap *)icon - infoWindow:(FGMPlatformInfoWindow *)infoWindow - position:(FGMPlatformLatLng *)position - rotation:(double)rotation - visible:(BOOL)visible - zIndex:(double)zIndex - markerId:(NSString *)markerId - clusterManagerId:(nullable NSString *)clusterManagerId; -@property(nonatomic, assign) double alpha; -@property(nonatomic, strong) FGMPlatformPoint *anchor; -@property(nonatomic, assign) BOOL consumeTapEvents; -@property(nonatomic, assign) BOOL draggable; -@property(nonatomic, assign) BOOL flat; -@property(nonatomic, strong) FGMPlatformBitmap *icon; -@property(nonatomic, strong) FGMPlatformInfoWindow *infoWindow; -@property(nonatomic, strong) FGMPlatformLatLng *position; -@property(nonatomic, assign) double rotation; -@property(nonatomic, assign) BOOL visible; -@property(nonatomic, assign) double zIndex; -@property(nonatomic, copy) NSString *markerId; -@property(nonatomic, copy, nullable) NSString *clusterManagerId; ++ (instancetype)makeWithAlpha:(double )alpha + anchor:(FGMPlatformPoint *)anchor + consumeTapEvents:(BOOL )consumeTapEvents + draggable:(BOOL )draggable + flat:(BOOL )flat + icon:(FGMPlatformBitmap *)icon + infoWindow:(FGMPlatformInfoWindow *)infoWindow + position:(FGMPlatformLatLng *)position + rotation:(double )rotation + visible:(BOOL )visible + zIndex:(double )zIndex + markerId:(NSString *)markerId + clusterManagerId:(nullable NSString *)clusterManagerId; +@property(nonatomic, assign) double alpha; +@property(nonatomic, strong) FGMPlatformPoint * anchor; +@property(nonatomic, assign) BOOL consumeTapEvents; +@property(nonatomic, assign) BOOL draggable; +@property(nonatomic, assign) BOOL flat; +@property(nonatomic, strong) FGMPlatformBitmap * icon; +@property(nonatomic, strong) FGMPlatformInfoWindow * infoWindow; +@property(nonatomic, strong) FGMPlatformLatLng * position; +@property(nonatomic, assign) double rotation; +@property(nonatomic, assign) BOOL visible; +@property(nonatomic, assign) double zIndex; +@property(nonatomic, copy) NSString * markerId; +@property(nonatomic, copy, nullable) NSString * clusterManagerId; @end /// Pigeon equivalent of the Polygon class. @@ -305,25 +310,25 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithPolygonId:(NSString *)polygonId - consumesTapEvents:(BOOL)consumesTapEvents - fillColor:(NSInteger)fillColor - geodesic:(BOOL)geodesic - points:(NSArray *)points - holes:(NSArray *> *)holes - visible:(BOOL)visible - strokeColor:(NSInteger)strokeColor - strokeWidth:(NSInteger)strokeWidth - zIndex:(NSInteger)zIndex; -@property(nonatomic, copy) NSString *polygonId; -@property(nonatomic, assign) BOOL consumesTapEvents; -@property(nonatomic, assign) NSInteger fillColor; -@property(nonatomic, assign) BOOL geodesic; -@property(nonatomic, copy) NSArray *points; -@property(nonatomic, copy) NSArray *> *holes; -@property(nonatomic, assign) BOOL visible; -@property(nonatomic, assign) NSInteger strokeColor; -@property(nonatomic, assign) NSInteger strokeWidth; -@property(nonatomic, assign) NSInteger zIndex; + consumesTapEvents:(BOOL )consumesTapEvents + fillColor:(NSInteger )fillColor + geodesic:(BOOL )geodesic + points:(NSArray *)points + holes:(NSArray *> *)holes + visible:(BOOL )visible + strokeColor:(NSInteger )strokeColor + strokeWidth:(NSInteger )strokeWidth + zIndex:(NSInteger )zIndex; +@property(nonatomic, copy) NSString * polygonId; +@property(nonatomic, assign) BOOL consumesTapEvents; +@property(nonatomic, assign) NSInteger fillColor; +@property(nonatomic, assign) BOOL geodesic; +@property(nonatomic, copy) NSArray * points; +@property(nonatomic, copy) NSArray *> * holes; +@property(nonatomic, assign) BOOL visible; +@property(nonatomic, assign) NSInteger strokeColor; +@property(nonatomic, assign) NSInteger strokeWidth; +@property(nonatomic, assign) NSInteger zIndex; @end /// Pigeon equivalent of the Polyline class. @@ -331,48 +336,49 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithPolylineId:(NSString *)polylineId - consumesTapEvents:(BOOL)consumesTapEvents - color:(NSInteger)color - geodesic:(BOOL)geodesic - jointType:(FGMPlatformJointType)jointType - patterns:(NSArray *)patterns - points:(NSArray *)points - visible:(BOOL)visible - width:(NSInteger)width - zIndex:(NSInteger)zIndex; -@property(nonatomic, copy) NSString *polylineId; -@property(nonatomic, assign) BOOL consumesTapEvents; -@property(nonatomic, assign) NSInteger color; -@property(nonatomic, assign) BOOL geodesic; + consumesTapEvents:(BOOL )consumesTapEvents + color:(NSInteger )color + geodesic:(BOOL )geodesic + jointType:(FGMPlatformJointType)jointType + patterns:(NSArray *)patterns + points:(NSArray *)points + visible:(BOOL )visible + width:(NSInteger )width + zIndex:(NSInteger )zIndex; +@property(nonatomic, copy) NSString * polylineId; +@property(nonatomic, assign) BOOL consumesTapEvents; +@property(nonatomic, assign) NSInteger color; +@property(nonatomic, assign) BOOL geodesic; /// The joint type. @property(nonatomic, assign) FGMPlatformJointType jointType; /// The pattern data, as a list of pattern items. -@property(nonatomic, copy) NSArray *patterns; -@property(nonatomic, copy) NSArray *points; -@property(nonatomic, assign) BOOL visible; -@property(nonatomic, assign) NSInteger width; -@property(nonatomic, assign) NSInteger zIndex; +@property(nonatomic, copy) NSArray * patterns; +@property(nonatomic, copy) NSArray * points; +@property(nonatomic, assign) BOOL visible; +@property(nonatomic, assign) NSInteger width; +@property(nonatomic, assign) NSInteger zIndex; @end /// Pigeon equivalent of the PatternItem class. @interface FGMPlatformPatternItem : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithType:(FGMPlatformPatternItemType)type length:(nullable NSNumber *)length; ++ (instancetype)makeWithType:(FGMPlatformPatternItemType)type + length:(nullable NSNumber *)length; @property(nonatomic, assign) FGMPlatformPatternItemType type; -@property(nonatomic, strong, nullable) NSNumber *length; +@property(nonatomic, strong, nullable) NSNumber * length; @end /// Pigeon equivalent of the Tile class. @interface FGMPlatformTile : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithWidth:(NSInteger)width - height:(NSInteger)height - data:(nullable FlutterStandardTypedData *)data; -@property(nonatomic, assign) NSInteger width; -@property(nonatomic, assign) NSInteger height; -@property(nonatomic, strong, nullable) FlutterStandardTypedData *data; ++ (instancetype)makeWithWidth:(NSInteger )width + height:(NSInteger )height + data:(nullable FlutterStandardTypedData *)data; +@property(nonatomic, assign) NSInteger width; +@property(nonatomic, assign) NSInteger height; +@property(nonatomic, strong, nullable) FlutterStandardTypedData * data; @end /// Pigeon equivalent of the TileOverlay class. @@ -380,37 +386,41 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithTileOverlayId:(NSString *)tileOverlayId - fadeIn:(BOOL)fadeIn - transparency:(double)transparency - zIndex:(NSInteger)zIndex - visible:(BOOL)visible - tileSize:(NSInteger)tileSize; -@property(nonatomic, copy) NSString *tileOverlayId; -@property(nonatomic, assign) BOOL fadeIn; -@property(nonatomic, assign) double transparency; -@property(nonatomic, assign) NSInteger zIndex; -@property(nonatomic, assign) BOOL visible; -@property(nonatomic, assign) NSInteger tileSize; + fadeIn:(BOOL )fadeIn + transparency:(double )transparency + zIndex:(NSInteger )zIndex + visible:(BOOL )visible + tileSize:(NSInteger )tileSize; +@property(nonatomic, copy) NSString * tileOverlayId; +@property(nonatomic, assign) BOOL fadeIn; +@property(nonatomic, assign) double transparency; +@property(nonatomic, assign) NSInteger zIndex; +@property(nonatomic, assign) BOOL visible; +@property(nonatomic, assign) NSInteger tileSize; @end /// Pigeon equivalent of Flutter's EdgeInsets. @interface FGMPlatformEdgeInsets : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithTop:(double)top bottom:(double)bottom left:(double)left right:(double)right; -@property(nonatomic, assign) double top; -@property(nonatomic, assign) double bottom; -@property(nonatomic, assign) double left; -@property(nonatomic, assign) double right; ++ (instancetype)makeWithTop:(double )top + bottom:(double )bottom + left:(double )left + right:(double )right; +@property(nonatomic, assign) double top; +@property(nonatomic, assign) double bottom; +@property(nonatomic, assign) double left; +@property(nonatomic, assign) double right; @end /// Pigeon equivalent of LatLng. @interface FGMPlatformLatLng : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithLatitude:(double)latitude longitude:(double)longitude; -@property(nonatomic, assign) double latitude; -@property(nonatomic, assign) double longitude; ++ (instancetype)makeWithLatitude:(double )latitude + longitude:(double )longitude; +@property(nonatomic, assign) double latitude; +@property(nonatomic, assign) double longitude; @end /// Pigeon equivalent of LatLngBounds. @@ -418,9 +428,9 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithNortheast:(FGMPlatformLatLng *)northeast - southwest:(FGMPlatformLatLng *)southwest; -@property(nonatomic, strong) FGMPlatformLatLng *northeast; -@property(nonatomic, strong) FGMPlatformLatLng *southwest; + southwest:(FGMPlatformLatLng *)southwest; +@property(nonatomic, strong) FGMPlatformLatLng * northeast; +@property(nonatomic, strong) FGMPlatformLatLng * southwest; @end /// Pigeon equivalent of CameraTargetBounds. @@ -429,109 +439,111 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// a target, and having an explicitly unbounded target (null [bounds]). @interface FGMPlatformCameraTargetBounds : NSObject + (instancetype)makeWithBounds:(nullable FGMPlatformLatLngBounds *)bounds; -@property(nonatomic, strong, nullable) FGMPlatformLatLngBounds *bounds; +@property(nonatomic, strong, nullable) FGMPlatformLatLngBounds * bounds; @end /// Information passed to the platform view creation. @interface FGMPlatformMapViewCreationParams : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype) - makeWithInitialCameraPosition:(FGMPlatformCameraPosition *)initialCameraPosition - mapConfiguration:(FGMPlatformMapConfiguration *)mapConfiguration - initialCircles:(NSArray *)initialCircles - initialMarkers:(NSArray *)initialMarkers - initialPolygons:(NSArray *)initialPolygons - initialPolylines:(NSArray *)initialPolylines - initialHeatmaps:(NSArray *)initialHeatmaps - initialTileOverlays:(NSArray *)initialTileOverlays - initialClusterManagers:(NSArray *)initialClusterManagers; -@property(nonatomic, strong) FGMPlatformCameraPosition *initialCameraPosition; -@property(nonatomic, strong) FGMPlatformMapConfiguration *mapConfiguration; -@property(nonatomic, copy) NSArray *initialCircles; -@property(nonatomic, copy) NSArray *initialMarkers; -@property(nonatomic, copy) NSArray *initialPolygons; -@property(nonatomic, copy) NSArray *initialPolylines; -@property(nonatomic, copy) NSArray *initialHeatmaps; -@property(nonatomic, copy) NSArray *initialTileOverlays; -@property(nonatomic, copy) NSArray *initialClusterManagers; ++ (instancetype)makeWithInitialCameraPosition:(FGMPlatformCameraPosition *)initialCameraPosition + mapConfiguration:(FGMPlatformMapConfiguration *)mapConfiguration + initialCircles:(NSArray *)initialCircles + initialMarkers:(NSArray *)initialMarkers + initialPolygons:(NSArray *)initialPolygons + initialPolylines:(NSArray *)initialPolylines + initialHeatmaps:(NSArray *)initialHeatmaps + initialTileOverlays:(NSArray *)initialTileOverlays + initialClusterManagers:(NSArray *)initialClusterManagers; +@property(nonatomic, strong) FGMPlatformCameraPosition * initialCameraPosition; +@property(nonatomic, strong) FGMPlatformMapConfiguration * mapConfiguration; +@property(nonatomic, copy) NSArray * initialCircles; +@property(nonatomic, copy) NSArray * initialMarkers; +@property(nonatomic, copy) NSArray * initialPolygons; +@property(nonatomic, copy) NSArray * initialPolylines; +@property(nonatomic, copy) NSArray * initialHeatmaps; +@property(nonatomic, copy) NSArray * initialTileOverlays; +@property(nonatomic, copy) NSArray * initialClusterManagers; @end /// Pigeon equivalent of MapConfiguration. @interface FGMPlatformMapConfiguration : NSObject + (instancetype)makeWithCompassEnabled:(nullable NSNumber *)compassEnabled - cameraTargetBounds:(nullable FGMPlatformCameraTargetBounds *)cameraTargetBounds - mapType:(nullable FGMPlatformMapTypeBox *)mapType - minMaxZoomPreference:(nullable FGMPlatformZoomRange *)minMaxZoomPreference - rotateGesturesEnabled:(nullable NSNumber *)rotateGesturesEnabled - scrollGesturesEnabled:(nullable NSNumber *)scrollGesturesEnabled - tiltGesturesEnabled:(nullable NSNumber *)tiltGesturesEnabled - trackCameraPosition:(nullable NSNumber *)trackCameraPosition - zoomGesturesEnabled:(nullable NSNumber *)zoomGesturesEnabled - myLocationEnabled:(nullable NSNumber *)myLocationEnabled - myLocationButtonEnabled:(nullable NSNumber *)myLocationButtonEnabled - padding:(nullable FGMPlatformEdgeInsets *)padding - indoorViewEnabled:(nullable NSNumber *)indoorViewEnabled - trafficEnabled:(nullable NSNumber *)trafficEnabled - buildingsEnabled:(nullable NSNumber *)buildingsEnabled - cloudMapId:(nullable NSString *)cloudMapId - style:(nullable NSString *)style; -@property(nonatomic, strong, nullable) NSNumber *compassEnabled; -@property(nonatomic, strong, nullable) FGMPlatformCameraTargetBounds *cameraTargetBounds; -@property(nonatomic, strong, nullable) FGMPlatformMapTypeBox *mapType; -@property(nonatomic, strong, nullable) FGMPlatformZoomRange *minMaxZoomPreference; -@property(nonatomic, strong, nullable) NSNumber *rotateGesturesEnabled; -@property(nonatomic, strong, nullable) NSNumber *scrollGesturesEnabled; -@property(nonatomic, strong, nullable) NSNumber *tiltGesturesEnabled; -@property(nonatomic, strong, nullable) NSNumber *trackCameraPosition; -@property(nonatomic, strong, nullable) NSNumber *zoomGesturesEnabled; -@property(nonatomic, strong, nullable) NSNumber *myLocationEnabled; -@property(nonatomic, strong, nullable) NSNumber *myLocationButtonEnabled; -@property(nonatomic, strong, nullable) FGMPlatformEdgeInsets *padding; -@property(nonatomic, strong, nullable) NSNumber *indoorViewEnabled; -@property(nonatomic, strong, nullable) NSNumber *trafficEnabled; -@property(nonatomic, strong, nullable) NSNumber *buildingsEnabled; -@property(nonatomic, copy, nullable) NSString *cloudMapId; -@property(nonatomic, copy, nullable) NSString *style; + cameraTargetBounds:(nullable FGMPlatformCameraTargetBounds *)cameraTargetBounds + mapType:(nullable FGMPlatformMapTypeBox *)mapType + minMaxZoomPreference:(nullable FGMPlatformZoomRange *)minMaxZoomPreference + rotateGesturesEnabled:(nullable NSNumber *)rotateGesturesEnabled + scrollGesturesEnabled:(nullable NSNumber *)scrollGesturesEnabled + tiltGesturesEnabled:(nullable NSNumber *)tiltGesturesEnabled + trackCameraPosition:(nullable NSNumber *)trackCameraPosition + zoomGesturesEnabled:(nullable NSNumber *)zoomGesturesEnabled + myLocationEnabled:(nullable NSNumber *)myLocationEnabled + myLocationButtonEnabled:(nullable NSNumber *)myLocationButtonEnabled + padding:(nullable FGMPlatformEdgeInsets *)padding + indoorViewEnabled:(nullable NSNumber *)indoorViewEnabled + trafficEnabled:(nullable NSNumber *)trafficEnabled + buildingsEnabled:(nullable NSNumber *)buildingsEnabled + cloudMapId:(nullable NSString *)cloudMapId + style:(nullable NSString *)style; +@property(nonatomic, strong, nullable) NSNumber * compassEnabled; +@property(nonatomic, strong, nullable) FGMPlatformCameraTargetBounds * cameraTargetBounds; +@property(nonatomic, strong, nullable) FGMPlatformMapTypeBox * mapType; +@property(nonatomic, strong, nullable) FGMPlatformZoomRange * minMaxZoomPreference; +@property(nonatomic, strong, nullable) NSNumber * rotateGesturesEnabled; +@property(nonatomic, strong, nullable) NSNumber * scrollGesturesEnabled; +@property(nonatomic, strong, nullable) NSNumber * tiltGesturesEnabled; +@property(nonatomic, strong, nullable) NSNumber * trackCameraPosition; +@property(nonatomic, strong, nullable) NSNumber * zoomGesturesEnabled; +@property(nonatomic, strong, nullable) NSNumber * myLocationEnabled; +@property(nonatomic, strong, nullable) NSNumber * myLocationButtonEnabled; +@property(nonatomic, strong, nullable) FGMPlatformEdgeInsets * padding; +@property(nonatomic, strong, nullable) NSNumber * indoorViewEnabled; +@property(nonatomic, strong, nullable) NSNumber * trafficEnabled; +@property(nonatomic, strong, nullable) NSNumber * buildingsEnabled; +@property(nonatomic, copy, nullable) NSString * cloudMapId; +@property(nonatomic, copy, nullable) NSString * style; @end /// Pigeon representation of an x,y coordinate. @interface FGMPlatformPoint : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithX:(double)x y:(double)y; -@property(nonatomic, assign) double x; -@property(nonatomic, assign) double y; ++ (instancetype)makeWithX:(double )x + y:(double )y; +@property(nonatomic, assign) double x; +@property(nonatomic, assign) double y; @end /// Pigeon representation of a size. @interface FGMPlatformSize : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithWidth:(double)width height:(double)height; -@property(nonatomic, assign) double width; -@property(nonatomic, assign) double height; ++ (instancetype)makeWithWidth:(double )width + height:(double )height; +@property(nonatomic, assign) double width; +@property(nonatomic, assign) double height; @end /// Pigeon equivalent of GMSTileLayer properties. @interface FGMPlatformTileLayer : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithVisible:(BOOL)visible - fadeIn:(BOOL)fadeIn - opacity:(double)opacity - zIndex:(NSInteger)zIndex; -@property(nonatomic, assign) BOOL visible; -@property(nonatomic, assign) BOOL fadeIn; -@property(nonatomic, assign) double opacity; -@property(nonatomic, assign) NSInteger zIndex; ++ (instancetype)makeWithVisible:(BOOL )visible + fadeIn:(BOOL )fadeIn + opacity:(double )opacity + zIndex:(NSInteger )zIndex; +@property(nonatomic, assign) BOOL visible; +@property(nonatomic, assign) BOOL fadeIn; +@property(nonatomic, assign) double opacity; +@property(nonatomic, assign) NSInteger zIndex; @end /// Pigeon equivalent of MinMaxZoomPreference. @interface FGMPlatformZoomRange : NSObject -+ (instancetype)makeWithMin:(nullable NSNumber *)min max:(nullable NSNumber *)max; -@property(nonatomic, strong, nullable) NSNumber *min; -@property(nonatomic, strong, nullable) NSNumber *max; ++ (instancetype)makeWithMin:(nullable NSNumber *)min + max:(nullable NSNumber *)max; +@property(nonatomic, strong, nullable) NSNumber * min; +@property(nonatomic, strong, nullable) NSNumber * max; @end /// Pigeon equivalent of [BitmapDescriptor]. As there are multiple disjoint @@ -540,7 +552,7 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { @interface FGMPlatformBitmap : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithBitmap:(id)bitmap; ++ (instancetype)makeWithBitmap:(id )bitmap; /// One of [PlatformBitmapAssetMap], [PlatformBitmapAsset], /// [PlatformBitmapAssetImage], [PlatformBitmapBytesMap], /// [PlatformBitmapBytes], or [PlatformBitmapDefaultMarker]. @@ -548,82 +560,85 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// approach allows for the different bitmap implementations to be valid /// argument and return types of the API methods. See /// https://github.com/flutter/flutter/issues/117819. -@property(nonatomic, strong) id bitmap; +@property(nonatomic, strong) id bitmap; @end -/// Pigeon equivalent of [DefaultMarker]. See -/// https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/BitmapDescriptorFactory#defaultMarker(float) +/// Pigeon equivalent of [DefaultMarker]. @interface FGMPlatformBitmapDefaultMarker : NSObject + (instancetype)makeWithHue:(nullable NSNumber *)hue; -@property(nonatomic, strong, nullable) NSNumber *hue; +@property(nonatomic, strong, nullable) NSNumber * hue; @end -/// Pigeon equivalent of [BytesBitmap]. See -/// https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/BitmapDescriptorFactory#fromBitmap(android.graphics.Bitmap) +/// Pigeon equivalent of [BytesBitmap]. @interface FGMPlatformBitmapBytes : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithByteData:(FlutterStandardTypedData *)byteData - size:(nullable FGMPlatformSize *)size; -@property(nonatomic, strong) FlutterStandardTypedData *byteData; -@property(nonatomic, strong, nullable) FGMPlatformSize *size; + size:(nullable FGMPlatformSize *)size; +@property(nonatomic, strong) FlutterStandardTypedData * byteData; +@property(nonatomic, strong, nullable) FGMPlatformSize * size; @end -/// Pigeon equivalent of [AssetBitmap]. See -/// https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/BitmapDescriptorFactory#public-static-bitmapdescriptor-fromasset-string-assetname +/// Pigeon equivalent of [AssetBitmap]. @interface FGMPlatformBitmapAsset : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithName:(NSString *)name pkg:(nullable NSString *)pkg; -@property(nonatomic, copy) NSString *name; -@property(nonatomic, copy, nullable) NSString *pkg; ++ (instancetype)makeWithName:(NSString *)name + pkg:(nullable NSString *)pkg; +@property(nonatomic, copy) NSString * name; +@property(nonatomic, copy, nullable) NSString * pkg; @end -/// Pigeon equivalent of [AssetImageBitmap]. See -/// https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/BitmapDescriptorFactory#public-static-bitmapdescriptor-fromasset-string-assetname +/// Pigeon equivalent of [AssetImageBitmap]. @interface FGMPlatformBitmapAssetImage : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithName:(NSString *)name - scale:(double)scale - size:(nullable FGMPlatformSize *)size; -@property(nonatomic, copy) NSString *name; -@property(nonatomic, assign) double scale; -@property(nonatomic, strong, nullable) FGMPlatformSize *size; + scale:(double )scale + size:(nullable FGMPlatformSize *)size; +@property(nonatomic, copy) NSString * name; +@property(nonatomic, assign) double scale; +@property(nonatomic, strong, nullable) FGMPlatformSize * size; @end -/// Pigeon equivalent of [AssetMapBitmap]. See -/// https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/BitmapDescriptorFactory#public-static-bitmapdescriptor-fromasset-string-assetname +/// Pigeon equivalent of [AssetMapBitmap]. @interface FGMPlatformBitmapAssetMap : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithAssetName:(NSString *)assetName - bitmapScaling:(FGMPlatformMapBitmapScaling)bitmapScaling - imagePixelRatio:(double)imagePixelRatio - width:(nullable NSNumber *)width - height:(nullable NSNumber *)height; -@property(nonatomic, copy) NSString *assetName; + bitmapScaling:(FGMPlatformMapBitmapScaling)bitmapScaling + imagePixelRatio:(double )imagePixelRatio + width:(nullable NSNumber *)width + height:(nullable NSNumber *)height; +@property(nonatomic, copy) NSString * assetName; @property(nonatomic, assign) FGMPlatformMapBitmapScaling bitmapScaling; -@property(nonatomic, assign) double imagePixelRatio; -@property(nonatomic, strong, nullable) NSNumber *width; -@property(nonatomic, strong, nullable) NSNumber *height; +@property(nonatomic, assign) double imagePixelRatio; +@property(nonatomic, strong, nullable) NSNumber * width; +@property(nonatomic, strong, nullable) NSNumber * height; @end -/// Pigeon equivalent of [BytesMapBitmap]. See -/// https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/BitmapDescriptorFactory#public-static-bitmapdescriptor-frombitmap-bitmap-image +/// Pigeon equivalent of [BytesMapBitmap]. @interface FGMPlatformBitmapBytesMap : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithByteData:(FlutterStandardTypedData *)byteData - bitmapScaling:(FGMPlatformMapBitmapScaling)bitmapScaling - imagePixelRatio:(double)imagePixelRatio - width:(nullable NSNumber *)width - height:(nullable NSNumber *)height; -@property(nonatomic, strong) FlutterStandardTypedData *byteData; + bitmapScaling:(FGMPlatformMapBitmapScaling)bitmapScaling + imagePixelRatio:(double )imagePixelRatio + width:(nullable NSNumber *)width + height:(nullable NSNumber *)height; +@property(nonatomic, strong) FlutterStandardTypedData * byteData; @property(nonatomic, assign) FGMPlatformMapBitmapScaling bitmapScaling; -@property(nonatomic, assign) double imagePixelRatio; -@property(nonatomic, strong, nullable) NSNumber *width; -@property(nonatomic, strong, nullable) NSNumber *height; +@property(nonatomic, assign) double imagePixelRatio; +@property(nonatomic, strong, nullable) NSNumber * width; +@property(nonatomic, strong, nullable) NSNumber * height; +@end + +/// Pigeon equivalent of a registered bitmap. +@interface FGMPlatformBitmapRegisteredMapBitmap : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithId:(NSInteger )id; +@property(nonatomic, assign) NSInteger id; @end /// The codec used by all APIs. @@ -639,80 +654,51 @@ NSObject *FGMGetMessagesCodec(void); /// /// Only non-null configuration values will result in updates; options with /// null values will remain unchanged. -- (void)updateWithMapConfiguration:(FGMPlatformMapConfiguration *)configuration - error:(FlutterError *_Nullable *_Nonnull)error; +- (void)updateWithMapConfiguration:(FGMPlatformMapConfiguration *)configuration error:(FlutterError *_Nullable *_Nonnull)error; /// Updates the set of circles on the map. -- (void)updateCirclesByAdding:(NSArray *)toAdd - changing:(NSArray *)toChange - removing:(NSArray *)idsToRemove - error:(FlutterError *_Nullable *_Nonnull)error; +- (void)updateCirclesByAdding:(NSArray *)toAdd changing:(NSArray *)toChange removing:(NSArray *)idsToRemove error:(FlutterError *_Nullable *_Nonnull)error; /// Updates the set of heatmaps on the map. -- (void)updateHeatmapsByAdding:(NSArray *)toAdd - changing:(NSArray *)toChange - removing:(NSArray *)idsToRemove - error:(FlutterError *_Nullable *_Nonnull)error; +- (void)updateHeatmapsByAdding:(NSArray *)toAdd changing:(NSArray *)toChange removing:(NSArray *)idsToRemove error:(FlutterError *_Nullable *_Nonnull)error; /// Updates the set of custer managers for clusters on the map. -- (void)updateClusterManagersByAdding:(NSArray *)toAdd - removing:(NSArray *)idsToRemove - error:(FlutterError *_Nullable *_Nonnull)error; +- (void)updateClusterManagersByAdding:(NSArray *)toAdd removing:(NSArray *)idsToRemove error:(FlutterError *_Nullable *_Nonnull)error; /// Updates the set of markers on the map. -- (void)updateMarkersByAdding:(NSArray *)toAdd - changing:(NSArray *)toChange - removing:(NSArray *)idsToRemove - error:(FlutterError *_Nullable *_Nonnull)error; +- (void)updateMarkersByAdding:(NSArray *)toAdd changing:(NSArray *)toChange removing:(NSArray *)idsToRemove error:(FlutterError *_Nullable *_Nonnull)error; /// Updates the set of polygonss on the map. -- (void)updatePolygonsByAdding:(NSArray *)toAdd - changing:(NSArray *)toChange - removing:(NSArray *)idsToRemove - error:(FlutterError *_Nullable *_Nonnull)error; +- (void)updatePolygonsByAdding:(NSArray *)toAdd changing:(NSArray *)toChange removing:(NSArray *)idsToRemove error:(FlutterError *_Nullable *_Nonnull)error; /// Updates the set of polylines on the map. -- (void)updatePolylinesByAdding:(NSArray *)toAdd - changing:(NSArray *)toChange - removing:(NSArray *)idsToRemove - error:(FlutterError *_Nullable *_Nonnull)error; +- (void)updatePolylinesByAdding:(NSArray *)toAdd changing:(NSArray *)toChange removing:(NSArray *)idsToRemove error:(FlutterError *_Nullable *_Nonnull)error; /// Updates the set of tile overlays on the map. -- (void)updateTileOverlaysByAdding:(NSArray *)toAdd - changing:(NSArray *)toChange - removing:(NSArray *)idsToRemove - error:(FlutterError *_Nullable *_Nonnull)error; +- (void)updateTileOverlaysByAdding:(NSArray *)toAdd changing:(NSArray *)toChange removing:(NSArray *)idsToRemove error:(FlutterError *_Nullable *_Nonnull)error; /// Gets the screen coordinate for the given map location. /// /// @return `nil` only when `error != nil`. -- (nullable FGMPlatformPoint *)screenCoordinatesForLatLng:(FGMPlatformLatLng *)latLng - error:(FlutterError *_Nullable *_Nonnull)error; +- (nullable FGMPlatformPoint *)screenCoordinatesForLatLng:(FGMPlatformLatLng *)latLng error:(FlutterError *_Nullable *_Nonnull)error; /// Gets the map location for the given screen coordinate. /// /// @return `nil` only when `error != nil`. -- (nullable FGMPlatformLatLng *)latLngForScreenCoordinate:(FGMPlatformPoint *)screenCoordinate - error:(FlutterError *_Nullable *_Nonnull)error; +- (nullable FGMPlatformLatLng *)latLngForScreenCoordinate:(FGMPlatformPoint *)screenCoordinate error:(FlutterError *_Nullable *_Nonnull)error; /// Gets the map region currently displayed on the map. /// /// @return `nil` only when `error != nil`. - (nullable FGMPlatformLatLngBounds *)visibleMapRegion:(FlutterError *_Nullable *_Nonnull)error; /// Moves the camera according to [cameraUpdate] immediately, with no /// animation. -- (void)moveCameraWithUpdate:(FGMPlatformCameraUpdate *)cameraUpdate - error:(FlutterError *_Nullable *_Nonnull)error; +- (void)moveCameraWithUpdate:(FGMPlatformCameraUpdate *)cameraUpdate error:(FlutterError *_Nullable *_Nonnull)error; /// Moves the camera according to [cameraUpdate], animating the update. -- (void)animateCameraWithUpdate:(FGMPlatformCameraUpdate *)cameraUpdate - error:(FlutterError *_Nullable *_Nonnull)error; +- (void)animateCameraWithUpdate:(FGMPlatformCameraUpdate *)cameraUpdate error:(FlutterError *_Nullable *_Nonnull)error; /// Gets the current map zoom level. /// /// @return `nil` only when `error != nil`. - (nullable NSNumber *)currentZoomLevel:(FlutterError *_Nullable *_Nonnull)error; /// Show the info window for the marker with the given ID. -- (void)showInfoWindowForMarkerWithIdentifier:(NSString *)markerId - error:(FlutterError *_Nullable *_Nonnull)error; +- (void)showInfoWindowForMarkerWithIdentifier:(NSString *)markerId error:(FlutterError *_Nullable *_Nonnull)error; /// Hide the info window for the marker with the given ID. -- (void)hideInfoWindowForMarkerWithIdentifier:(NSString *)markerId - error:(FlutterError *_Nullable *_Nonnull)error; +- (void)hideInfoWindowForMarkerWithIdentifier:(NSString *)markerId error:(FlutterError *_Nullable *_Nonnull)error; /// Returns true if the marker with the given ID is currently displaying its /// info window. /// /// @return `nil` only when `error != nil`. -- (nullable NSNumber *) - isShowingInfoWindowForMarkerWithIdentifier:(NSString *)markerId - error:(FlutterError *_Nullable *_Nonnull)error; +- (nullable NSNumber *)isShowingInfoWindowForMarkerWithIdentifier:(NSString *)markerId error:(FlutterError *_Nullable *_Nonnull)error; /// Sets the style to the given map style string, where an empty string /// indicates that the style should be cleared. /// @@ -726,90 +712,64 @@ NSObject *FGMGetMessagesCodec(void); /// is no way to return failures from map initialization. - (nullable NSString *)lastStyleError:(FlutterError *_Nullable *_Nonnull)error; /// Clears the cache of tiles previously requseted from the tile provider. -- (void)clearTileCacheForOverlayWithIdentifier:(NSString *)tileOverlayId - error:(FlutterError *_Nullable *_Nonnull)error; +- (void)clearTileCacheForOverlayWithIdentifier:(NSString *)tileOverlayId error:(FlutterError *_Nullable *_Nonnull)error; /// Takes a snapshot of the map and returns its image data. -- (nullable FlutterStandardTypedData *)takeSnapshotWithError: - (FlutterError *_Nullable *_Nonnull)error; +- (nullable FlutterStandardTypedData *)takeSnapshotWithError:(FlutterError *_Nullable *_Nonnull)error; @end -extern void SetUpFGMMapsApi(id binaryMessenger, - NSObject *_Nullable api); +extern void SetUpFGMMapsApi(id binaryMessenger, NSObject *_Nullable api); + +extern void SetUpFGMMapsApiWithSuffix(id binaryMessenger, NSObject *_Nullable api, NSString *messageChannelSuffix); -extern void SetUpFGMMapsApiWithSuffix(id binaryMessenger, - NSObject *_Nullable api, - NSString *messageChannelSuffix); /// Interface for calls from the native SDK to Dart. @interface FGMMapsCallbackApi : NSObject - (instancetype)initWithBinaryMessenger:(id)binaryMessenger; -- (instancetype)initWithBinaryMessenger:(id)binaryMessenger - messageChannelSuffix:(nullable NSString *)messageChannelSuffix; +- (instancetype)initWithBinaryMessenger:(id)binaryMessenger messageChannelSuffix:(nullable NSString *)messageChannelSuffix; /// Called when the map camera starts moving. - (void)didStartCameraMoveWithCompletion:(void (^)(FlutterError *_Nullable))completion; /// Called when the map camera moves. -- (void)didMoveCameraToPosition:(FGMPlatformCameraPosition *)cameraPosition - completion:(void (^)(FlutterError *_Nullable))completion; +- (void)didMoveCameraToPosition:(FGMPlatformCameraPosition *)cameraPosition completion:(void (^)(FlutterError *_Nullable))completion; /// Called when the map camera stops moving. - (void)didIdleCameraWithCompletion:(void (^)(FlutterError *_Nullable))completion; /// Called when the map, not a specifc map object, is tapped. -- (void)didTapAtPosition:(FGMPlatformLatLng *)position - completion:(void (^)(FlutterError *_Nullable))completion; +- (void)didTapAtPosition:(FGMPlatformLatLng *)position completion:(void (^)(FlutterError *_Nullable))completion; /// Called when the map, not a specifc map object, is long pressed. -- (void)didLongPressAtPosition:(FGMPlatformLatLng *)position - completion:(void (^)(FlutterError *_Nullable))completion; +- (void)didLongPressAtPosition:(FGMPlatformLatLng *)position completion:(void (^)(FlutterError *_Nullable))completion; /// Called when a marker is tapped. -- (void)didTapMarkerWithIdentifier:(NSString *)markerId - completion:(void (^)(FlutterError *_Nullable))completion; +- (void)didTapMarkerWithIdentifier:(NSString *)markerId completion:(void (^)(FlutterError *_Nullable))completion; /// Called when a marker drag starts. -- (void)didStartDragForMarkerWithIdentifier:(NSString *)markerId - atPosition:(FGMPlatformLatLng *)position - completion:(void (^)(FlutterError *_Nullable))completion; +- (void)didStartDragForMarkerWithIdentifier:(NSString *)markerId atPosition:(FGMPlatformLatLng *)position completion:(void (^)(FlutterError *_Nullable))completion; /// Called when a marker drag updates. -- (void)didDragMarkerWithIdentifier:(NSString *)markerId - atPosition:(FGMPlatformLatLng *)position - completion:(void (^)(FlutterError *_Nullable))completion; +- (void)didDragMarkerWithIdentifier:(NSString *)markerId atPosition:(FGMPlatformLatLng *)position completion:(void (^)(FlutterError *_Nullable))completion; /// Called when a marker drag ends. -- (void)didEndDragForMarkerWithIdentifier:(NSString *)markerId - atPosition:(FGMPlatformLatLng *)position - completion:(void (^)(FlutterError *_Nullable))completion; +- (void)didEndDragForMarkerWithIdentifier:(NSString *)markerId atPosition:(FGMPlatformLatLng *)position completion:(void (^)(FlutterError *_Nullable))completion; /// Called when a marker's info window is tapped. -- (void)didTapInfoWindowOfMarkerWithIdentifier:(NSString *)markerId - completion:(void (^)(FlutterError *_Nullable))completion; +- (void)didTapInfoWindowOfMarkerWithIdentifier:(NSString *)markerId completion:(void (^)(FlutterError *_Nullable))completion; /// Called when a circle is tapped. -- (void)didTapCircleWithIdentifier:(NSString *)circleId - completion:(void (^)(FlutterError *_Nullable))completion; +- (void)didTapCircleWithIdentifier:(NSString *)circleId completion:(void (^)(FlutterError *_Nullable))completion; /// Called when a marker cluster is tapped. -- (void)didTapCluster:(FGMPlatformCluster *)cluster - completion:(void (^)(FlutterError *_Nullable))completion; +- (void)didTapCluster:(FGMPlatformCluster *)cluster completion:(void (^)(FlutterError *_Nullable))completion; /// Called when a polygon is tapped. -- (void)didTapPolygonWithIdentifier:(NSString *)polygonId - completion:(void (^)(FlutterError *_Nullable))completion; +- (void)didTapPolygonWithIdentifier:(NSString *)polygonId completion:(void (^)(FlutterError *_Nullable))completion; /// Called when a polyline is tapped. -- (void)didTapPolylineWithIdentifier:(NSString *)polylineId - completion:(void (^)(FlutterError *_Nullable))completion; +- (void)didTapPolylineWithIdentifier:(NSString *)polylineId completion:(void (^)(FlutterError *_Nullable))completion; /// Called to get data for a map tile. -- (void)tileWithOverlayIdentifier:(NSString *)tileOverlayId - location:(FGMPlatformPoint *)location - zoom:(NSInteger)zoom - completion:(void (^)(FGMPlatformTile *_Nullable, - FlutterError *_Nullable))completion; +- (void)tileWithOverlayIdentifier:(NSString *)tileOverlayId location:(FGMPlatformPoint *)location zoom:(NSInteger)zoom completion:(void (^)(FGMPlatformTile *_Nullable, FlutterError *_Nullable))completion; @end + /// Dummy interface to force generation of the platform view creation params, /// which are not used in any Pigeon calls, only the platform view creation /// call made internally by Flutter. @protocol FGMMapsPlatformViewApi -- (void)createViewType:(nullable FGMPlatformMapViewCreationParams *)type - error:(FlutterError *_Nullable *_Nonnull)error; +- (void)createViewType:(nullable FGMPlatformMapViewCreationParams *)type error:(FlutterError *_Nullable *_Nonnull)error; @end -extern void SetUpFGMMapsPlatformViewApi(id binaryMessenger, - NSObject *_Nullable api); +extern void SetUpFGMMapsPlatformViewApi(id binaryMessenger, NSObject *_Nullable api); + +extern void SetUpFGMMapsPlatformViewApiWithSuffix(id binaryMessenger, NSObject *_Nullable api, NSString *messageChannelSuffix); -extern void SetUpFGMMapsPlatformViewApiWithSuffix(id binaryMessenger, - NSObject *_Nullable api, - NSString *messageChannelSuffix); /// Inspector API only intended for use in integration tests. @protocol FGMMapsInspectorApi @@ -829,24 +789,31 @@ extern void SetUpFGMMapsPlatformViewApiWithSuffix(id bin - (nullable NSNumber *)isMyLocationButtonEnabledWithError:(FlutterError *_Nullable *_Nonnull)error; /// @return `nil` only when `error != nil`. - (nullable NSNumber *)isTrafficEnabledWithError:(FlutterError *_Nullable *_Nonnull)error; -- (nullable FGMPlatformTileLayer *)tileOverlayWithIdentifier:(NSString *)tileOverlayId - error: - (FlutterError *_Nullable *_Nonnull)error; -- (nullable FGMPlatformHeatmap *)heatmapWithIdentifier:(NSString *)heatmapId - error:(FlutterError *_Nullable *_Nonnull)error; +- (nullable FGMPlatformTileLayer *)tileOverlayWithIdentifier:(NSString *)tileOverlayId error:(FlutterError *_Nullable *_Nonnull)error; +- (nullable FGMPlatformHeatmap *)heatmapWithIdentifier:(NSString *)heatmapId error:(FlutterError *_Nullable *_Nonnull)error; /// @return `nil` only when `error != nil`. - (nullable FGMPlatformZoomRange *)zoomRange:(FlutterError *_Nullable *_Nonnull)error; /// @return `nil` only when `error != nil`. -- (nullable NSArray *) - clustersWithIdentifier:(NSString *)clusterManagerId - error:(FlutterError *_Nullable *_Nonnull)error; +- (nullable NSArray *)clustersWithIdentifier:(NSString *)clusterManagerId error:(FlutterError *_Nullable *_Nonnull)error; +@end + +extern void SetUpFGMMapsInspectorApi(id binaryMessenger, NSObject *_Nullable api); + +extern void SetUpFGMMapsInspectorApiWithSuffix(id binaryMessenger, NSObject *_Nullable api, NSString *messageChannelSuffix); + + +/// API for interacting with the image registry. +@protocol FGMImageRegistryApi +/// Adds a bitmap to the cache. +- (void)addBitmapToCacheId:(NSInteger)id bitmap:(FGMPlatformBitmap *)bitmap error:(FlutterError *_Nullable *_Nonnull)error; +/// Retrieves a bitmap from the cache. +- (void)removeBitmapFromCacheId:(NSInteger)id error:(FlutterError *_Nullable *_Nonnull)error; +/// Clears the bitmap cache. +- (void)clearBitmapCacheWithError:(FlutterError *_Nullable *_Nonnull)error; @end -extern void SetUpFGMMapsInspectorApi(id binaryMessenger, - NSObject *_Nullable api); +extern void SetUpFGMImageRegistryApi(id binaryMessenger, NSObject *_Nullable api); -extern void SetUpFGMMapsInspectorApiWithSuffix(id binaryMessenger, - NSObject *_Nullable api, - NSString *messageChannelSuffix); +extern void SetUpFGMImageRegistryApiWithSuffix(id binaryMessenger, NSObject *_Nullable api, NSString *messageChannelSuffix); NS_ASSUME_NONNULL_END diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.m index 5d3474cf79c..1fcf8ddd5df 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.m @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v22.6.1), do not edit directly. +// Autogenerated from Pigeon (v22.7.2), do not edit directly. // See also: https://pub.dev/packages/pigeon #import "messages.g.h" @@ -26,12 +26,7 @@ } static FlutterError *createConnectionError(NSString *channelName) { - return [FlutterError - errorWithCode:@"channel-error" - message:[NSString stringWithFormat:@"%@/%@/%@", - @"Unable to establish connection on channel: '", - channelName, @"'."] - details:@""]; + return [FlutterError errorWithCode:@"channel-error" message:[NSString stringWithFormat:@"%@/%@/%@", @"Unable to establish connection on channel: '", channelName, @"'."] details:@""]; } static id GetNullableObjectAtIndex(NSArray *array, NSInteger key) { @@ -311,12 +306,18 @@ + (nullable FGMPlatformBitmapBytesMap *)nullableFromList:(NSArray *)list; - (NSArray *)toList; @end +@interface FGMPlatformBitmapRegisteredMapBitmap () ++ (FGMPlatformBitmapRegisteredMapBitmap *)fromList:(NSArray *)list; ++ (nullable FGMPlatformBitmapRegisteredMapBitmap *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + @implementation FGMPlatformCameraPosition -+ (instancetype)makeWithBearing:(double)bearing - target:(FGMPlatformLatLng *)target - tilt:(double)tilt - zoom:(double)zoom { - FGMPlatformCameraPosition *pigeonResult = [[FGMPlatformCameraPosition alloc] init]; ++ (instancetype)makeWithBearing:(double )bearing + target:(FGMPlatformLatLng *)target + tilt:(double )tilt + zoom:(double )zoom { + FGMPlatformCameraPosition* pigeonResult = [[FGMPlatformCameraPosition alloc] init]; pigeonResult.bearing = bearing; pigeonResult.target = target; pigeonResult.tilt = tilt; @@ -345,8 +346,8 @@ + (nullable FGMPlatformCameraPosition *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformCameraUpdate -+ (instancetype)makeWithCameraUpdate:(id)cameraUpdate { - FGMPlatformCameraUpdate *pigeonResult = [[FGMPlatformCameraUpdate alloc] init]; ++ (instancetype)makeWithCameraUpdate:(id )cameraUpdate { + FGMPlatformCameraUpdate* pigeonResult = [[FGMPlatformCameraUpdate alloc] init]; pigeonResult.cameraUpdate = cameraUpdate; return pigeonResult; } @@ -367,14 +368,12 @@ + (nullable FGMPlatformCameraUpdate *)nullableFromList:(NSArray *)list { @implementation FGMPlatformCameraUpdateNewCameraPosition + (instancetype)makeWithCameraPosition:(FGMPlatformCameraPosition *)cameraPosition { - FGMPlatformCameraUpdateNewCameraPosition *pigeonResult = - [[FGMPlatformCameraUpdateNewCameraPosition alloc] init]; + FGMPlatformCameraUpdateNewCameraPosition* pigeonResult = [[FGMPlatformCameraUpdateNewCameraPosition alloc] init]; pigeonResult.cameraPosition = cameraPosition; return pigeonResult; } + (FGMPlatformCameraUpdateNewCameraPosition *)fromList:(NSArray *)list { - FGMPlatformCameraUpdateNewCameraPosition *pigeonResult = - [[FGMPlatformCameraUpdateNewCameraPosition alloc] init]; + FGMPlatformCameraUpdateNewCameraPosition *pigeonResult = [[FGMPlatformCameraUpdateNewCameraPosition alloc] init]; pigeonResult.cameraPosition = GetNullableObjectAtIndex(list, 0); return pigeonResult; } @@ -390,7 +389,7 @@ + (nullable FGMPlatformCameraUpdateNewCameraPosition *)nullableFromList:(NSArray @implementation FGMPlatformCameraUpdateNewLatLng + (instancetype)makeWithLatLng:(FGMPlatformLatLng *)latLng { - FGMPlatformCameraUpdateNewLatLng *pigeonResult = [[FGMPlatformCameraUpdateNewLatLng alloc] init]; + FGMPlatformCameraUpdateNewLatLng* pigeonResult = [[FGMPlatformCameraUpdateNewLatLng alloc] init]; pigeonResult.latLng = latLng; return pigeonResult; } @@ -410,16 +409,15 @@ + (nullable FGMPlatformCameraUpdateNewLatLng *)nullableFromList:(NSArray *)l @end @implementation FGMPlatformCameraUpdateNewLatLngBounds -+ (instancetype)makeWithBounds:(FGMPlatformLatLngBounds *)bounds padding:(double)padding { - FGMPlatformCameraUpdateNewLatLngBounds *pigeonResult = - [[FGMPlatformCameraUpdateNewLatLngBounds alloc] init]; ++ (instancetype)makeWithBounds:(FGMPlatformLatLngBounds *)bounds + padding:(double )padding { + FGMPlatformCameraUpdateNewLatLngBounds* pigeonResult = [[FGMPlatformCameraUpdateNewLatLngBounds alloc] init]; pigeonResult.bounds = bounds; pigeonResult.padding = padding; return pigeonResult; } + (FGMPlatformCameraUpdateNewLatLngBounds *)fromList:(NSArray *)list { - FGMPlatformCameraUpdateNewLatLngBounds *pigeonResult = - [[FGMPlatformCameraUpdateNewLatLngBounds alloc] init]; + FGMPlatformCameraUpdateNewLatLngBounds *pigeonResult = [[FGMPlatformCameraUpdateNewLatLngBounds alloc] init]; pigeonResult.bounds = GetNullableObjectAtIndex(list, 0); pigeonResult.padding = [GetNullableObjectAtIndex(list, 1) doubleValue]; return pigeonResult; @@ -436,16 +434,15 @@ + (nullable FGMPlatformCameraUpdateNewLatLngBounds *)nullableFromList:(NSArray *)list { - FGMPlatformCameraUpdateNewLatLngZoom *pigeonResult = - [[FGMPlatformCameraUpdateNewLatLngZoom alloc] init]; + FGMPlatformCameraUpdateNewLatLngZoom *pigeonResult = [[FGMPlatformCameraUpdateNewLatLngZoom alloc] init]; pigeonResult.latLng = GetNullableObjectAtIndex(list, 0); pigeonResult.zoom = [GetNullableObjectAtIndex(list, 1) doubleValue]; return pigeonResult; @@ -462,8 +459,9 @@ + (nullable FGMPlatformCameraUpdateNewLatLngZoom *)nullableFromList:(NSArray @end @implementation FGMPlatformCameraUpdateScrollBy -+ (instancetype)makeWithDx:(double)dx dy:(double)dy { - FGMPlatformCameraUpdateScrollBy *pigeonResult = [[FGMPlatformCameraUpdateScrollBy alloc] init]; ++ (instancetype)makeWithDx:(double )dx + dy:(double )dy { + FGMPlatformCameraUpdateScrollBy* pigeonResult = [[FGMPlatformCameraUpdateScrollBy alloc] init]; pigeonResult.dx = dx; pigeonResult.dy = dy; return pigeonResult; @@ -486,8 +484,9 @@ + (nullable FGMPlatformCameraUpdateScrollBy *)nullableFromList:(NSArray *)li @end @implementation FGMPlatformCameraUpdateZoomBy -+ (instancetype)makeWithAmount:(double)amount focus:(nullable FGMPlatformPoint *)focus { - FGMPlatformCameraUpdateZoomBy *pigeonResult = [[FGMPlatformCameraUpdateZoomBy alloc] init]; ++ (instancetype)makeWithAmount:(double )amount + focus:(nullable FGMPlatformPoint *)focus { + FGMPlatformCameraUpdateZoomBy* pigeonResult = [[FGMPlatformCameraUpdateZoomBy alloc] init]; pigeonResult.amount = amount; pigeonResult.focus = focus; return pigeonResult; @@ -510,8 +509,8 @@ + (nullable FGMPlatformCameraUpdateZoomBy *)nullableFromList:(NSArray *)list @end @implementation FGMPlatformCameraUpdateZoom -+ (instancetype)makeWithOut:(BOOL)out { - FGMPlatformCameraUpdateZoom *pigeonResult = [[FGMPlatformCameraUpdateZoom alloc] init]; ++ (instancetype)makeWithOut:(BOOL )out { + FGMPlatformCameraUpdateZoom* pigeonResult = [[FGMPlatformCameraUpdateZoom alloc] init]; pigeonResult.out = out; return pigeonResult; } @@ -531,8 +530,8 @@ + (nullable FGMPlatformCameraUpdateZoom *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformCameraUpdateZoomTo -+ (instancetype)makeWithZoom:(double)zoom { - FGMPlatformCameraUpdateZoomTo *pigeonResult = [[FGMPlatformCameraUpdateZoomTo alloc] init]; ++ (instancetype)makeWithZoom:(double )zoom { + FGMPlatformCameraUpdateZoomTo* pigeonResult = [[FGMPlatformCameraUpdateZoomTo alloc] init]; pigeonResult.zoom = zoom; return pigeonResult; } @@ -552,16 +551,16 @@ + (nullable FGMPlatformCameraUpdateZoomTo *)nullableFromList:(NSArray *)list @end @implementation FGMPlatformCircle -+ (instancetype)makeWithConsumeTapEvents:(BOOL)consumeTapEvents - fillColor:(NSInteger)fillColor - strokeColor:(NSInteger)strokeColor - visible:(BOOL)visible - strokeWidth:(NSInteger)strokeWidth - zIndex:(double)zIndex - center:(FGMPlatformLatLng *)center - radius:(double)radius - circleId:(NSString *)circleId { - FGMPlatformCircle *pigeonResult = [[FGMPlatformCircle alloc] init]; ++ (instancetype)makeWithConsumeTapEvents:(BOOL )consumeTapEvents + fillColor:(NSInteger )fillColor + strokeColor:(NSInteger )strokeColor + visible:(BOOL )visible + strokeWidth:(NSInteger )strokeWidth + zIndex:(double )zIndex + center:(FGMPlatformLatLng *)center + radius:(double )radius + circleId:(NSString *)circleId { + FGMPlatformCircle* pigeonResult = [[FGMPlatformCircle alloc] init]; pigeonResult.consumeTapEvents = consumeTapEvents; pigeonResult.fillColor = fillColor; pigeonResult.strokeColor = strokeColor; @@ -605,8 +604,8 @@ + (nullable FGMPlatformCircle *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformHeatmap -+ (instancetype)makeWithJson:(id)json { - FGMPlatformHeatmap *pigeonResult = [[FGMPlatformHeatmap alloc] init]; ++ (instancetype)makeWithJson:(id )json { + FGMPlatformHeatmap* pigeonResult = [[FGMPlatformHeatmap alloc] init]; pigeonResult.json = json; return pigeonResult; } @@ -627,9 +626,9 @@ + (nullable FGMPlatformHeatmap *)nullableFromList:(NSArray *)list { @implementation FGMPlatformInfoWindow + (instancetype)makeWithTitle:(nullable NSString *)title - snippet:(nullable NSString *)snippet - anchor:(FGMPlatformPoint *)anchor { - FGMPlatformInfoWindow *pigeonResult = [[FGMPlatformInfoWindow alloc] init]; + snippet:(nullable NSString *)snippet + anchor:(FGMPlatformPoint *)anchor { + FGMPlatformInfoWindow* pigeonResult = [[FGMPlatformInfoWindow alloc] init]; pigeonResult.title = title; pigeonResult.snippet = snippet; pigeonResult.anchor = anchor; @@ -656,10 +655,10 @@ + (nullable FGMPlatformInfoWindow *)nullableFromList:(NSArray *)list { @implementation FGMPlatformCluster + (instancetype)makeWithClusterManagerId:(NSString *)clusterManagerId - position:(FGMPlatformLatLng *)position - bounds:(FGMPlatformLatLngBounds *)bounds - markerIds:(NSArray *)markerIds { - FGMPlatformCluster *pigeonResult = [[FGMPlatformCluster alloc] init]; + position:(FGMPlatformLatLng *)position + bounds:(FGMPlatformLatLngBounds *)bounds + markerIds:(NSArray *)markerIds { + FGMPlatformCluster* pigeonResult = [[FGMPlatformCluster alloc] init]; pigeonResult.clusterManagerId = clusterManagerId; pigeonResult.position = position; pigeonResult.bounds = bounds; @@ -689,7 +688,7 @@ + (nullable FGMPlatformCluster *)nullableFromList:(NSArray *)list { @implementation FGMPlatformClusterManager + (instancetype)makeWithIdentifier:(NSString *)identifier { - FGMPlatformClusterManager *pigeonResult = [[FGMPlatformClusterManager alloc] init]; + FGMPlatformClusterManager* pigeonResult = [[FGMPlatformClusterManager alloc] init]; pigeonResult.identifier = identifier; return pigeonResult; } @@ -709,20 +708,20 @@ + (nullable FGMPlatformClusterManager *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformMarker -+ (instancetype)makeWithAlpha:(double)alpha - anchor:(FGMPlatformPoint *)anchor - consumeTapEvents:(BOOL)consumeTapEvents - draggable:(BOOL)draggable - flat:(BOOL)flat - icon:(FGMPlatformBitmap *)icon - infoWindow:(FGMPlatformInfoWindow *)infoWindow - position:(FGMPlatformLatLng *)position - rotation:(double)rotation - visible:(BOOL)visible - zIndex:(double)zIndex - markerId:(NSString *)markerId - clusterManagerId:(nullable NSString *)clusterManagerId { - FGMPlatformMarker *pigeonResult = [[FGMPlatformMarker alloc] init]; ++ (instancetype)makeWithAlpha:(double )alpha + anchor:(FGMPlatformPoint *)anchor + consumeTapEvents:(BOOL )consumeTapEvents + draggable:(BOOL )draggable + flat:(BOOL )flat + icon:(FGMPlatformBitmap *)icon + infoWindow:(FGMPlatformInfoWindow *)infoWindow + position:(FGMPlatformLatLng *)position + rotation:(double )rotation + visible:(BOOL )visible + zIndex:(double )zIndex + markerId:(NSString *)markerId + clusterManagerId:(nullable NSString *)clusterManagerId { + FGMPlatformMarker* pigeonResult = [[FGMPlatformMarker alloc] init]; pigeonResult.alpha = alpha; pigeonResult.anchor = anchor; pigeonResult.consumeTapEvents = consumeTapEvents; @@ -779,16 +778,16 @@ + (nullable FGMPlatformMarker *)nullableFromList:(NSArray *)list { @implementation FGMPlatformPolygon + (instancetype)makeWithPolygonId:(NSString *)polygonId - consumesTapEvents:(BOOL)consumesTapEvents - fillColor:(NSInteger)fillColor - geodesic:(BOOL)geodesic - points:(NSArray *)points - holes:(NSArray *> *)holes - visible:(BOOL)visible - strokeColor:(NSInteger)strokeColor - strokeWidth:(NSInteger)strokeWidth - zIndex:(NSInteger)zIndex { - FGMPlatformPolygon *pigeonResult = [[FGMPlatformPolygon alloc] init]; + consumesTapEvents:(BOOL )consumesTapEvents + fillColor:(NSInteger )fillColor + geodesic:(BOOL )geodesic + points:(NSArray *)points + holes:(NSArray *> *)holes + visible:(BOOL )visible + strokeColor:(NSInteger )strokeColor + strokeWidth:(NSInteger )strokeWidth + zIndex:(NSInteger )zIndex { + FGMPlatformPolygon* pigeonResult = [[FGMPlatformPolygon alloc] init]; pigeonResult.polygonId = polygonId; pigeonResult.consumesTapEvents = consumesTapEvents; pigeonResult.fillColor = fillColor; @@ -836,16 +835,16 @@ + (nullable FGMPlatformPolygon *)nullableFromList:(NSArray *)list { @implementation FGMPlatformPolyline + (instancetype)makeWithPolylineId:(NSString *)polylineId - consumesTapEvents:(BOOL)consumesTapEvents - color:(NSInteger)color - geodesic:(BOOL)geodesic - jointType:(FGMPlatformJointType)jointType - patterns:(NSArray *)patterns - points:(NSArray *)points - visible:(BOOL)visible - width:(NSInteger)width - zIndex:(NSInteger)zIndex { - FGMPlatformPolyline *pigeonResult = [[FGMPlatformPolyline alloc] init]; + consumesTapEvents:(BOOL )consumesTapEvents + color:(NSInteger )color + geodesic:(BOOL )geodesic + jointType:(FGMPlatformJointType)jointType + patterns:(NSArray *)patterns + points:(NSArray *)points + visible:(BOOL )visible + width:(NSInteger )width + zIndex:(NSInteger )zIndex { + FGMPlatformPolyline* pigeonResult = [[FGMPlatformPolyline alloc] init]; pigeonResult.polylineId = polylineId; pigeonResult.consumesTapEvents = consumesTapEvents; pigeonResult.color = color; @@ -893,16 +892,16 @@ + (nullable FGMPlatformPolyline *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformPatternItem -+ (instancetype)makeWithType:(FGMPlatformPatternItemType)type length:(nullable NSNumber *)length { - FGMPlatformPatternItem *pigeonResult = [[FGMPlatformPatternItem alloc] init]; ++ (instancetype)makeWithType:(FGMPlatformPatternItemType)type + length:(nullable NSNumber *)length { + FGMPlatformPatternItem* pigeonResult = [[FGMPlatformPatternItem alloc] init]; pigeonResult.type = type; pigeonResult.length = length; return pigeonResult; } + (FGMPlatformPatternItem *)fromList:(NSArray *)list { FGMPlatformPatternItem *pigeonResult = [[FGMPlatformPatternItem alloc] init]; - FGMPlatformPatternItemTypeBox *boxedFGMPlatformPatternItemType = - GetNullableObjectAtIndex(list, 0); + FGMPlatformPatternItemTypeBox *boxedFGMPlatformPatternItemType = GetNullableObjectAtIndex(list, 0); pigeonResult.type = boxedFGMPlatformPatternItemType.value; pigeonResult.length = GetNullableObjectAtIndex(list, 1); return pigeonResult; @@ -919,10 +918,10 @@ + (nullable FGMPlatformPatternItem *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformTile -+ (instancetype)makeWithWidth:(NSInteger)width - height:(NSInteger)height - data:(nullable FlutterStandardTypedData *)data { - FGMPlatformTile *pigeonResult = [[FGMPlatformTile alloc] init]; ++ (instancetype)makeWithWidth:(NSInteger )width + height:(NSInteger )height + data:(nullable FlutterStandardTypedData *)data { + FGMPlatformTile* pigeonResult = [[FGMPlatformTile alloc] init]; pigeonResult.width = width; pigeonResult.height = height; pigeonResult.data = data; @@ -949,12 +948,12 @@ + (nullable FGMPlatformTile *)nullableFromList:(NSArray *)list { @implementation FGMPlatformTileOverlay + (instancetype)makeWithTileOverlayId:(NSString *)tileOverlayId - fadeIn:(BOOL)fadeIn - transparency:(double)transparency - zIndex:(NSInteger)zIndex - visible:(BOOL)visible - tileSize:(NSInteger)tileSize { - FGMPlatformTileOverlay *pigeonResult = [[FGMPlatformTileOverlay alloc] init]; + fadeIn:(BOOL )fadeIn + transparency:(double )transparency + zIndex:(NSInteger )zIndex + visible:(BOOL )visible + tileSize:(NSInteger )tileSize { + FGMPlatformTileOverlay* pigeonResult = [[FGMPlatformTileOverlay alloc] init]; pigeonResult.tileOverlayId = tileOverlayId; pigeonResult.fadeIn = fadeIn; pigeonResult.transparency = transparency; @@ -989,11 +988,11 @@ + (nullable FGMPlatformTileOverlay *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformEdgeInsets -+ (instancetype)makeWithTop:(double)top - bottom:(double)bottom - left:(double)left - right:(double)right { - FGMPlatformEdgeInsets *pigeonResult = [[FGMPlatformEdgeInsets alloc] init]; ++ (instancetype)makeWithTop:(double )top + bottom:(double )bottom + left:(double )left + right:(double )right { + FGMPlatformEdgeInsets* pigeonResult = [[FGMPlatformEdgeInsets alloc] init]; pigeonResult.top = top; pigeonResult.bottom = bottom; pigeonResult.left = left; @@ -1022,8 +1021,9 @@ + (nullable FGMPlatformEdgeInsets *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformLatLng -+ (instancetype)makeWithLatitude:(double)latitude longitude:(double)longitude { - FGMPlatformLatLng *pigeonResult = [[FGMPlatformLatLng alloc] init]; ++ (instancetype)makeWithLatitude:(double )latitude + longitude:(double )longitude { + FGMPlatformLatLng* pigeonResult = [[FGMPlatformLatLng alloc] init]; pigeonResult.latitude = latitude; pigeonResult.longitude = longitude; return pigeonResult; @@ -1047,8 +1047,8 @@ + (nullable FGMPlatformLatLng *)nullableFromList:(NSArray *)list { @implementation FGMPlatformLatLngBounds + (instancetype)makeWithNortheast:(FGMPlatformLatLng *)northeast - southwest:(FGMPlatformLatLng *)southwest { - FGMPlatformLatLngBounds *pigeonResult = [[FGMPlatformLatLngBounds alloc] init]; + southwest:(FGMPlatformLatLng *)southwest { + FGMPlatformLatLngBounds* pigeonResult = [[FGMPlatformLatLngBounds alloc] init]; pigeonResult.northeast = northeast; pigeonResult.southwest = southwest; return pigeonResult; @@ -1072,7 +1072,7 @@ + (nullable FGMPlatformLatLngBounds *)nullableFromList:(NSArray *)list { @implementation FGMPlatformCameraTargetBounds + (instancetype)makeWithBounds:(nullable FGMPlatformLatLngBounds *)bounds { - FGMPlatformCameraTargetBounds *pigeonResult = [[FGMPlatformCameraTargetBounds alloc] init]; + FGMPlatformCameraTargetBounds* pigeonResult = [[FGMPlatformCameraTargetBounds alloc] init]; pigeonResult.bounds = bounds; return pigeonResult; } @@ -1092,17 +1092,16 @@ + (nullable FGMPlatformCameraTargetBounds *)nullableFromList:(NSArray *)list @end @implementation FGMPlatformMapViewCreationParams -+ (instancetype) - makeWithInitialCameraPosition:(FGMPlatformCameraPosition *)initialCameraPosition - mapConfiguration:(FGMPlatformMapConfiguration *)mapConfiguration - initialCircles:(NSArray *)initialCircles - initialMarkers:(NSArray *)initialMarkers - initialPolygons:(NSArray *)initialPolygons - initialPolylines:(NSArray *)initialPolylines - initialHeatmaps:(NSArray *)initialHeatmaps - initialTileOverlays:(NSArray *)initialTileOverlays - initialClusterManagers:(NSArray *)initialClusterManagers { - FGMPlatformMapViewCreationParams *pigeonResult = [[FGMPlatformMapViewCreationParams alloc] init]; ++ (instancetype)makeWithInitialCameraPosition:(FGMPlatformCameraPosition *)initialCameraPosition + mapConfiguration:(FGMPlatformMapConfiguration *)mapConfiguration + initialCircles:(NSArray *)initialCircles + initialMarkers:(NSArray *)initialMarkers + initialPolygons:(NSArray *)initialPolygons + initialPolylines:(NSArray *)initialPolylines + initialHeatmaps:(NSArray *)initialHeatmaps + initialTileOverlays:(NSArray *)initialTileOverlays + initialClusterManagers:(NSArray *)initialClusterManagers { + FGMPlatformMapViewCreationParams* pigeonResult = [[FGMPlatformMapViewCreationParams alloc] init]; pigeonResult.initialCameraPosition = initialCameraPosition; pigeonResult.mapConfiguration = mapConfiguration; pigeonResult.initialCircles = initialCircles; @@ -1147,23 +1146,23 @@ + (nullable FGMPlatformMapViewCreationParams *)nullableFromList:(NSArray *)l @implementation FGMPlatformMapConfiguration + (instancetype)makeWithCompassEnabled:(nullable NSNumber *)compassEnabled - cameraTargetBounds:(nullable FGMPlatformCameraTargetBounds *)cameraTargetBounds - mapType:(nullable FGMPlatformMapTypeBox *)mapType - minMaxZoomPreference:(nullable FGMPlatformZoomRange *)minMaxZoomPreference - rotateGesturesEnabled:(nullable NSNumber *)rotateGesturesEnabled - scrollGesturesEnabled:(nullable NSNumber *)scrollGesturesEnabled - tiltGesturesEnabled:(nullable NSNumber *)tiltGesturesEnabled - trackCameraPosition:(nullable NSNumber *)trackCameraPosition - zoomGesturesEnabled:(nullable NSNumber *)zoomGesturesEnabled - myLocationEnabled:(nullable NSNumber *)myLocationEnabled - myLocationButtonEnabled:(nullable NSNumber *)myLocationButtonEnabled - padding:(nullable FGMPlatformEdgeInsets *)padding - indoorViewEnabled:(nullable NSNumber *)indoorViewEnabled - trafficEnabled:(nullable NSNumber *)trafficEnabled - buildingsEnabled:(nullable NSNumber *)buildingsEnabled - cloudMapId:(nullable NSString *)cloudMapId - style:(nullable NSString *)style { - FGMPlatformMapConfiguration *pigeonResult = [[FGMPlatformMapConfiguration alloc] init]; + cameraTargetBounds:(nullable FGMPlatformCameraTargetBounds *)cameraTargetBounds + mapType:(nullable FGMPlatformMapTypeBox *)mapType + minMaxZoomPreference:(nullable FGMPlatformZoomRange *)minMaxZoomPreference + rotateGesturesEnabled:(nullable NSNumber *)rotateGesturesEnabled + scrollGesturesEnabled:(nullable NSNumber *)scrollGesturesEnabled + tiltGesturesEnabled:(nullable NSNumber *)tiltGesturesEnabled + trackCameraPosition:(nullable NSNumber *)trackCameraPosition + zoomGesturesEnabled:(nullable NSNumber *)zoomGesturesEnabled + myLocationEnabled:(nullable NSNumber *)myLocationEnabled + myLocationButtonEnabled:(nullable NSNumber *)myLocationButtonEnabled + padding:(nullable FGMPlatformEdgeInsets *)padding + indoorViewEnabled:(nullable NSNumber *)indoorViewEnabled + trafficEnabled:(nullable NSNumber *)trafficEnabled + buildingsEnabled:(nullable NSNumber *)buildingsEnabled + cloudMapId:(nullable NSString *)cloudMapId + style:(nullable NSString *)style { + FGMPlatformMapConfiguration* pigeonResult = [[FGMPlatformMapConfiguration alloc] init]; pigeonResult.compassEnabled = compassEnabled; pigeonResult.cameraTargetBounds = cameraTargetBounds; pigeonResult.mapType = mapType; @@ -1231,8 +1230,9 @@ + (nullable FGMPlatformMapConfiguration *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformPoint -+ (instancetype)makeWithX:(double)x y:(double)y { - FGMPlatformPoint *pigeonResult = [[FGMPlatformPoint alloc] init]; ++ (instancetype)makeWithX:(double )x + y:(double )y { + FGMPlatformPoint* pigeonResult = [[FGMPlatformPoint alloc] init]; pigeonResult.x = x; pigeonResult.y = y; return pigeonResult; @@ -1255,8 +1255,9 @@ + (nullable FGMPlatformPoint *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformSize -+ (instancetype)makeWithWidth:(double)width height:(double)height { - FGMPlatformSize *pigeonResult = [[FGMPlatformSize alloc] init]; ++ (instancetype)makeWithWidth:(double )width + height:(double )height { + FGMPlatformSize* pigeonResult = [[FGMPlatformSize alloc] init]; pigeonResult.width = width; pigeonResult.height = height; return pigeonResult; @@ -1279,11 +1280,11 @@ + (nullable FGMPlatformSize *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformTileLayer -+ (instancetype)makeWithVisible:(BOOL)visible - fadeIn:(BOOL)fadeIn - opacity:(double)opacity - zIndex:(NSInteger)zIndex { - FGMPlatformTileLayer *pigeonResult = [[FGMPlatformTileLayer alloc] init]; ++ (instancetype)makeWithVisible:(BOOL )visible + fadeIn:(BOOL )fadeIn + opacity:(double )opacity + zIndex:(NSInteger )zIndex { + FGMPlatformTileLayer* pigeonResult = [[FGMPlatformTileLayer alloc] init]; pigeonResult.visible = visible; pigeonResult.fadeIn = fadeIn; pigeonResult.opacity = opacity; @@ -1312,8 +1313,9 @@ + (nullable FGMPlatformTileLayer *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformZoomRange -+ (instancetype)makeWithMin:(nullable NSNumber *)min max:(nullable NSNumber *)max { - FGMPlatformZoomRange *pigeonResult = [[FGMPlatformZoomRange alloc] init]; ++ (instancetype)makeWithMin:(nullable NSNumber *)min + max:(nullable NSNumber *)max { + FGMPlatformZoomRange* pigeonResult = [[FGMPlatformZoomRange alloc] init]; pigeonResult.min = min; pigeonResult.max = max; return pigeonResult; @@ -1336,8 +1338,8 @@ + (nullable FGMPlatformZoomRange *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformBitmap -+ (instancetype)makeWithBitmap:(id)bitmap { - FGMPlatformBitmap *pigeonResult = [[FGMPlatformBitmap alloc] init]; ++ (instancetype)makeWithBitmap:(id )bitmap { + FGMPlatformBitmap* pigeonResult = [[FGMPlatformBitmap alloc] init]; pigeonResult.bitmap = bitmap; return pigeonResult; } @@ -1358,7 +1360,7 @@ + (nullable FGMPlatformBitmap *)nullableFromList:(NSArray *)list { @implementation FGMPlatformBitmapDefaultMarker + (instancetype)makeWithHue:(nullable NSNumber *)hue { - FGMPlatformBitmapDefaultMarker *pigeonResult = [[FGMPlatformBitmapDefaultMarker alloc] init]; + FGMPlatformBitmapDefaultMarker* pigeonResult = [[FGMPlatformBitmapDefaultMarker alloc] init]; pigeonResult.hue = hue; return pigeonResult; } @@ -1379,8 +1381,8 @@ + (nullable FGMPlatformBitmapDefaultMarker *)nullableFromList:(NSArray *)lis @implementation FGMPlatformBitmapBytes + (instancetype)makeWithByteData:(FlutterStandardTypedData *)byteData - size:(nullable FGMPlatformSize *)size { - FGMPlatformBitmapBytes *pigeonResult = [[FGMPlatformBitmapBytes alloc] init]; + size:(nullable FGMPlatformSize *)size { + FGMPlatformBitmapBytes* pigeonResult = [[FGMPlatformBitmapBytes alloc] init]; pigeonResult.byteData = byteData; pigeonResult.size = size; return pigeonResult; @@ -1403,8 +1405,9 @@ + (nullable FGMPlatformBitmapBytes *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformBitmapAsset -+ (instancetype)makeWithName:(NSString *)name pkg:(nullable NSString *)pkg { - FGMPlatformBitmapAsset *pigeonResult = [[FGMPlatformBitmapAsset alloc] init]; ++ (instancetype)makeWithName:(NSString *)name + pkg:(nullable NSString *)pkg { + FGMPlatformBitmapAsset* pigeonResult = [[FGMPlatformBitmapAsset alloc] init]; pigeonResult.name = name; pigeonResult.pkg = pkg; return pigeonResult; @@ -1428,9 +1431,9 @@ + (nullable FGMPlatformBitmapAsset *)nullableFromList:(NSArray *)list { @implementation FGMPlatformBitmapAssetImage + (instancetype)makeWithName:(NSString *)name - scale:(double)scale - size:(nullable FGMPlatformSize *)size { - FGMPlatformBitmapAssetImage *pigeonResult = [[FGMPlatformBitmapAssetImage alloc] init]; + scale:(double )scale + size:(nullable FGMPlatformSize *)size { + FGMPlatformBitmapAssetImage* pigeonResult = [[FGMPlatformBitmapAssetImage alloc] init]; pigeonResult.name = name; pigeonResult.scale = scale; pigeonResult.size = size; @@ -1457,11 +1460,11 @@ + (nullable FGMPlatformBitmapAssetImage *)nullableFromList:(NSArray *)list { @implementation FGMPlatformBitmapAssetMap + (instancetype)makeWithAssetName:(NSString *)assetName - bitmapScaling:(FGMPlatformMapBitmapScaling)bitmapScaling - imagePixelRatio:(double)imagePixelRatio - width:(nullable NSNumber *)width - height:(nullable NSNumber *)height { - FGMPlatformBitmapAssetMap *pigeonResult = [[FGMPlatformBitmapAssetMap alloc] init]; + bitmapScaling:(FGMPlatformMapBitmapScaling)bitmapScaling + imagePixelRatio:(double )imagePixelRatio + width:(nullable NSNumber *)width + height:(nullable NSNumber *)height { + FGMPlatformBitmapAssetMap* pigeonResult = [[FGMPlatformBitmapAssetMap alloc] init]; pigeonResult.assetName = assetName; pigeonResult.bitmapScaling = bitmapScaling; pigeonResult.imagePixelRatio = imagePixelRatio; @@ -1472,8 +1475,7 @@ + (instancetype)makeWithAssetName:(NSString *)assetName + (FGMPlatformBitmapAssetMap *)fromList:(NSArray *)list { FGMPlatformBitmapAssetMap *pigeonResult = [[FGMPlatformBitmapAssetMap alloc] init]; pigeonResult.assetName = GetNullableObjectAtIndex(list, 0); - FGMPlatformMapBitmapScalingBox *boxedFGMPlatformMapBitmapScaling = - GetNullableObjectAtIndex(list, 1); + FGMPlatformMapBitmapScalingBox *boxedFGMPlatformMapBitmapScaling = GetNullableObjectAtIndex(list, 1); pigeonResult.bitmapScaling = boxedFGMPlatformMapBitmapScaling.value; pigeonResult.imagePixelRatio = [GetNullableObjectAtIndex(list, 2) doubleValue]; pigeonResult.width = GetNullableObjectAtIndex(list, 3); @@ -1496,11 +1498,11 @@ + (nullable FGMPlatformBitmapAssetMap *)nullableFromList:(NSArray *)list { @implementation FGMPlatformBitmapBytesMap + (instancetype)makeWithByteData:(FlutterStandardTypedData *)byteData - bitmapScaling:(FGMPlatformMapBitmapScaling)bitmapScaling - imagePixelRatio:(double)imagePixelRatio - width:(nullable NSNumber *)width - height:(nullable NSNumber *)height { - FGMPlatformBitmapBytesMap *pigeonResult = [[FGMPlatformBitmapBytesMap alloc] init]; + bitmapScaling:(FGMPlatformMapBitmapScaling)bitmapScaling + imagePixelRatio:(double )imagePixelRatio + width:(nullable NSNumber *)width + height:(nullable NSNumber *)height { + FGMPlatformBitmapBytesMap* pigeonResult = [[FGMPlatformBitmapBytesMap alloc] init]; pigeonResult.byteData = byteData; pigeonResult.bitmapScaling = bitmapScaling; pigeonResult.imagePixelRatio = imagePixelRatio; @@ -1511,8 +1513,7 @@ + (instancetype)makeWithByteData:(FlutterStandardTypedData *)byteData + (FGMPlatformBitmapBytesMap *)fromList:(NSArray *)list { FGMPlatformBitmapBytesMap *pigeonResult = [[FGMPlatformBitmapBytesMap alloc] init]; pigeonResult.byteData = GetNullableObjectAtIndex(list, 0); - FGMPlatformMapBitmapScalingBox *boxedFGMPlatformMapBitmapScaling = - GetNullableObjectAtIndex(list, 1); + FGMPlatformMapBitmapScalingBox *boxedFGMPlatformMapBitmapScaling = GetNullableObjectAtIndex(list, 1); pigeonResult.bitmapScaling = boxedFGMPlatformMapBitmapScaling.value; pigeonResult.imagePixelRatio = [GetNullableObjectAtIndex(list, 2) doubleValue]; pigeonResult.width = GetNullableObjectAtIndex(list, 3); @@ -1533,6 +1534,27 @@ + (nullable FGMPlatformBitmapBytesMap *)nullableFromList:(NSArray *)list { } @end +@implementation FGMPlatformBitmapRegisteredMapBitmap ++ (instancetype)makeWithId:(NSInteger )id { + FGMPlatformBitmapRegisteredMapBitmap* pigeonResult = [[FGMPlatformBitmapRegisteredMapBitmap alloc] init]; + pigeonResult.id = id; + return pigeonResult; +} ++ (FGMPlatformBitmapRegisteredMapBitmap *)fromList:(NSArray *)list { + FGMPlatformBitmapRegisteredMapBitmap *pigeonResult = [[FGMPlatformBitmapRegisteredMapBitmap alloc] init]; + pigeonResult.id = [GetNullableObjectAtIndex(list, 0) integerValue]; + return pigeonResult; +} ++ (nullable FGMPlatformBitmapRegisteredMapBitmap *)nullableFromList:(NSArray *)list { + return (list) ? [FGMPlatformBitmapRegisteredMapBitmap fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + @(self.id), + ]; +} +@end + @interface FGMMessagesPigeonCodecReader : FlutterStandardReader @end @implementation FGMMessagesPigeonCodecReader @@ -1540,104 +1562,98 @@ - (nullable id)readValueOfType:(UInt8)type { switch (type) { case 129: { NSNumber *enumAsNumber = [self readValue]; - return enumAsNumber == nil - ? nil - : [[FGMPlatformMapTypeBox alloc] initWithValue:[enumAsNumber integerValue]]; + return enumAsNumber == nil ? nil : [[FGMPlatformMapTypeBox alloc] initWithValue:[enumAsNumber integerValue]]; } case 130: { NSNumber *enumAsNumber = [self readValue]; - return enumAsNumber == nil - ? nil - : [[FGMPlatformJointTypeBox alloc] initWithValue:[enumAsNumber integerValue]]; + return enumAsNumber == nil ? nil : [[FGMPlatformJointTypeBox alloc] initWithValue:[enumAsNumber integerValue]]; } case 131: { NSNumber *enumAsNumber = [self readValue]; - return enumAsNumber == nil ? nil - : [[FGMPlatformPatternItemTypeBox alloc] - initWithValue:[enumAsNumber integerValue]]; + return enumAsNumber == nil ? nil : [[FGMPlatformPatternItemTypeBox alloc] initWithValue:[enumAsNumber integerValue]]; } case 132: { NSNumber *enumAsNumber = [self readValue]; - return enumAsNumber == nil ? nil - : [[FGMPlatformMapBitmapScalingBox alloc] - initWithValue:[enumAsNumber integerValue]]; + return enumAsNumber == nil ? nil : [[FGMPlatformMapBitmapScalingBox alloc] initWithValue:[enumAsNumber integerValue]]; } - case 133: + case 133: return [FGMPlatformCameraPosition fromList:[self readValue]]; - case 134: + case 134: return [FGMPlatformCameraUpdate fromList:[self readValue]]; - case 135: + case 135: return [FGMPlatformCameraUpdateNewCameraPosition fromList:[self readValue]]; - case 136: + case 136: return [FGMPlatformCameraUpdateNewLatLng fromList:[self readValue]]; - case 137: + case 137: return [FGMPlatformCameraUpdateNewLatLngBounds fromList:[self readValue]]; - case 138: + case 138: return [FGMPlatformCameraUpdateNewLatLngZoom fromList:[self readValue]]; - case 139: + case 139: return [FGMPlatformCameraUpdateScrollBy fromList:[self readValue]]; - case 140: + case 140: return [FGMPlatformCameraUpdateZoomBy fromList:[self readValue]]; - case 141: + case 141: return [FGMPlatformCameraUpdateZoom fromList:[self readValue]]; - case 142: + case 142: return [FGMPlatformCameraUpdateZoomTo fromList:[self readValue]]; - case 143: + case 143: return [FGMPlatformCircle fromList:[self readValue]]; - case 144: + case 144: return [FGMPlatformHeatmap fromList:[self readValue]]; - case 145: + case 145: return [FGMPlatformInfoWindow fromList:[self readValue]]; - case 146: + case 146: return [FGMPlatformCluster fromList:[self readValue]]; - case 147: + case 147: return [FGMPlatformClusterManager fromList:[self readValue]]; - case 148: + case 148: return [FGMPlatformMarker fromList:[self readValue]]; - case 149: + case 149: return [FGMPlatformPolygon fromList:[self readValue]]; - case 150: + case 150: return [FGMPlatformPolyline fromList:[self readValue]]; - case 151: + case 151: return [FGMPlatformPatternItem fromList:[self readValue]]; - case 152: + case 152: return [FGMPlatformTile fromList:[self readValue]]; - case 153: + case 153: return [FGMPlatformTileOverlay fromList:[self readValue]]; - case 154: + case 154: return [FGMPlatformEdgeInsets fromList:[self readValue]]; - case 155: + case 155: return [FGMPlatformLatLng fromList:[self readValue]]; - case 156: + case 156: return [FGMPlatformLatLngBounds fromList:[self readValue]]; - case 157: + case 157: return [FGMPlatformCameraTargetBounds fromList:[self readValue]]; - case 158: + case 158: return [FGMPlatformMapViewCreationParams fromList:[self readValue]]; - case 159: + case 159: return [FGMPlatformMapConfiguration fromList:[self readValue]]; - case 160: + case 160: return [FGMPlatformPoint fromList:[self readValue]]; - case 161: + case 161: return [FGMPlatformSize fromList:[self readValue]]; - case 162: + case 162: return [FGMPlatformTileLayer fromList:[self readValue]]; - case 163: + case 163: return [FGMPlatformZoomRange fromList:[self readValue]]; - case 164: + case 164: return [FGMPlatformBitmap fromList:[self readValue]]; - case 165: + case 165: return [FGMPlatformBitmapDefaultMarker fromList:[self readValue]]; - case 166: + case 166: return [FGMPlatformBitmapBytes fromList:[self readValue]]; - case 167: + case 167: return [FGMPlatformBitmapAsset fromList:[self readValue]]; - case 168: + case 168: return [FGMPlatformBitmapAssetImage fromList:[self readValue]]; - case 169: + case 169: return [FGMPlatformBitmapAssetMap fromList:[self readValue]]; - case 170: + case 170: return [FGMPlatformBitmapBytesMap fromList:[self readValue]]; + case 171: + return [FGMPlatformBitmapRegisteredMapBitmap fromList:[self readValue]]; default: return [super readValueOfType:type]; } @@ -1778,6 +1794,9 @@ - (void)writeValue:(id)value { } else if ([value isKindOfClass:[FGMPlatformBitmapBytesMap class]]) { [self writeByte:170]; [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[FGMPlatformBitmapRegisteredMapBitmap class]]) { + [self writeByte:171]; + [self writeValue:[value toList]]; } else { [super writeValue:value]; } @@ -1799,8 +1818,7 @@ - (FlutterStandardReader *)readerWithData:(NSData *)data { static FlutterStandardMessageCodec *sSharedObject = nil; static dispatch_once_t sPred = 0; dispatch_once(&sPred, ^{ - FGMMessagesPigeonCodecReaderWriter *readerWriter = - [[FGMMessagesPigeonCodecReaderWriter alloc] init]; + FGMMessagesPigeonCodecReaderWriter *readerWriter = [[FGMMessagesPigeonCodecReaderWriter alloc] init]; sSharedObject = [FlutterStandardMessageCodec codecWithReaderWriter:readerWriter]; }); return sSharedObject; @@ -1809,24 +1827,17 @@ void SetUpFGMMapsApi(id binaryMessenger, NSObject binaryMessenger, - NSObject *api, NSString *messageChannelSuffix) { - messageChannelSuffix = messageChannelSuffix.length > 0 - ? [NSString stringWithFormat:@".%@", messageChannelSuffix] - : @""; +void SetUpFGMMapsApiWithSuffix(id binaryMessenger, NSObject *api, NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 ? [NSString stringWithFormat: @".%@", messageChannelSuffix] : @""; /// Returns once the map instance is available. { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString - stringWithFormat: - @"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.waitForMap", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.waitForMap", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(waitForMapWithError:)], - @"FGMMapsApi api (%@) doesn't respond to @selector(waitForMapWithError:)", api); + NSCAssert([api respondsToSelector:@selector(waitForMapWithError:)], @"FGMMapsApi api (%@) doesn't respond to @selector(waitForMapWithError:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; [api waitForMapWithError:&error]; @@ -1841,18 +1852,13 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, /// Only non-null configuration values will result in updates; options with /// null values will remain unchanged. { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsApi.updateMapConfiguration", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateMapConfiguration", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert( - [api respondsToSelector:@selector(updateWithMapConfiguration:error:)], - @"FGMMapsApi api (%@) doesn't respond to @selector(updateWithMapConfiguration:error:)", - api); + NSCAssert([api respondsToSelector:@selector(updateWithMapConfiguration:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(updateWithMapConfiguration:error:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; FGMPlatformMapConfiguration *arg_configuration = GetNullableObjectAtIndex(args, 0); @@ -1866,29 +1872,20 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, } /// Updates the set of circles on the map. { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString - stringWithFormat: - @"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateCircles", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateCircles", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(updateCirclesByAdding:changing:removing:error:)], - @"FGMMapsApi api (%@) doesn't respond to " - @"@selector(updateCirclesByAdding:changing:removing:error:)", - api); + NSCAssert([api respondsToSelector:@selector(updateCirclesByAdding:changing:removing:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(updateCirclesByAdding:changing:removing:error:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSArray *arg_toAdd = GetNullableObjectAtIndex(args, 0); NSArray *arg_toChange = GetNullableObjectAtIndex(args, 1); NSArray *arg_idsToRemove = GetNullableObjectAtIndex(args, 2); FlutterError *error; - [api updateCirclesByAdding:arg_toAdd - changing:arg_toChange - removing:arg_idsToRemove - error:&error]; + [api updateCirclesByAdding:arg_toAdd changing:arg_toChange removing:arg_idsToRemove error:&error]; callback(wrapResult(nil, error)); }]; } else { @@ -1897,28 +1894,20 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, } /// Updates the set of heatmaps on the map. { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsApi.updateHeatmaps", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateHeatmaps", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(updateHeatmapsByAdding:changing:removing:error:)], - @"FGMMapsApi api (%@) doesn't respond to " - @"@selector(updateHeatmapsByAdding:changing:removing:error:)", - api); + NSCAssert([api respondsToSelector:@selector(updateHeatmapsByAdding:changing:removing:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(updateHeatmapsByAdding:changing:removing:error:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSArray *arg_toAdd = GetNullableObjectAtIndex(args, 0); NSArray *arg_toChange = GetNullableObjectAtIndex(args, 1); NSArray *arg_idsToRemove = GetNullableObjectAtIndex(args, 2); FlutterError *error; - [api updateHeatmapsByAdding:arg_toAdd - changing:arg_toChange - removing:arg_idsToRemove - error:&error]; + [api updateHeatmapsByAdding:arg_toAdd changing:arg_toChange removing:arg_idsToRemove error:&error]; callback(wrapResult(nil, error)); }]; } else { @@ -1927,18 +1916,13 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, } /// Updates the set of custer managers for clusters on the map. { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsApi.updateClusterManagers", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateClusterManagers", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(updateClusterManagersByAdding:removing:error:)], - @"FGMMapsApi api (%@) doesn't respond to " - @"@selector(updateClusterManagersByAdding:removing:error:)", - api); + NSCAssert([api respondsToSelector:@selector(updateClusterManagersByAdding:removing:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(updateClusterManagersByAdding:removing:error:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSArray *arg_toAdd = GetNullableObjectAtIndex(args, 0); @@ -1953,29 +1937,20 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, } /// Updates the set of markers on the map. { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString - stringWithFormat: - @"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateMarkers", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateMarkers", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(updateMarkersByAdding:changing:removing:error:)], - @"FGMMapsApi api (%@) doesn't respond to " - @"@selector(updateMarkersByAdding:changing:removing:error:)", - api); + NSCAssert([api respondsToSelector:@selector(updateMarkersByAdding:changing:removing:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(updateMarkersByAdding:changing:removing:error:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSArray *arg_toAdd = GetNullableObjectAtIndex(args, 0); NSArray *arg_toChange = GetNullableObjectAtIndex(args, 1); NSArray *arg_idsToRemove = GetNullableObjectAtIndex(args, 2); FlutterError *error; - [api updateMarkersByAdding:arg_toAdd - changing:arg_toChange - removing:arg_idsToRemove - error:&error]; + [api updateMarkersByAdding:arg_toAdd changing:arg_toChange removing:arg_idsToRemove error:&error]; callback(wrapResult(nil, error)); }]; } else { @@ -1984,28 +1959,20 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, } /// Updates the set of polygonss on the map. { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsApi.updatePolygons", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updatePolygons", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(updatePolygonsByAdding:changing:removing:error:)], - @"FGMMapsApi api (%@) doesn't respond to " - @"@selector(updatePolygonsByAdding:changing:removing:error:)", - api); + NSCAssert([api respondsToSelector:@selector(updatePolygonsByAdding:changing:removing:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(updatePolygonsByAdding:changing:removing:error:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSArray *arg_toAdd = GetNullableObjectAtIndex(args, 0); NSArray *arg_toChange = GetNullableObjectAtIndex(args, 1); NSArray *arg_idsToRemove = GetNullableObjectAtIndex(args, 2); FlutterError *error; - [api updatePolygonsByAdding:arg_toAdd - changing:arg_toChange - removing:arg_idsToRemove - error:&error]; + [api updatePolygonsByAdding:arg_toAdd changing:arg_toChange removing:arg_idsToRemove error:&error]; callback(wrapResult(nil, error)); }]; } else { @@ -2014,29 +1981,20 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, } /// Updates the set of polylines on the map. { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsApi.updatePolylines", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updatePolylines", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(updatePolylinesByAdding: - changing:removing:error:)], - @"FGMMapsApi api (%@) doesn't respond to " - @"@selector(updatePolylinesByAdding:changing:removing:error:)", - api); + NSCAssert([api respondsToSelector:@selector(updatePolylinesByAdding:changing:removing:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(updatePolylinesByAdding:changing:removing:error:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSArray *arg_toAdd = GetNullableObjectAtIndex(args, 0); NSArray *arg_toChange = GetNullableObjectAtIndex(args, 1); NSArray *arg_idsToRemove = GetNullableObjectAtIndex(args, 2); FlutterError *error; - [api updatePolylinesByAdding:arg_toAdd - changing:arg_toChange - removing:arg_idsToRemove - error:&error]; + [api updatePolylinesByAdding:arg_toAdd changing:arg_toChange removing:arg_idsToRemove error:&error]; callback(wrapResult(nil, error)); }]; } else { @@ -2045,29 +2003,20 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, } /// Updates the set of tile overlays on the map. { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsApi.updateTileOverlays", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateTileOverlays", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(updateTileOverlaysByAdding: - changing:removing:error:)], - @"FGMMapsApi api (%@) doesn't respond to " - @"@selector(updateTileOverlaysByAdding:changing:removing:error:)", - api); + NSCAssert([api respondsToSelector:@selector(updateTileOverlaysByAdding:changing:removing:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(updateTileOverlaysByAdding:changing:removing:error:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSArray *arg_toAdd = GetNullableObjectAtIndex(args, 0); NSArray *arg_toChange = GetNullableObjectAtIndex(args, 1); NSArray *arg_idsToRemove = GetNullableObjectAtIndex(args, 2); FlutterError *error; - [api updateTileOverlaysByAdding:arg_toAdd - changing:arg_toChange - removing:arg_idsToRemove - error:&error]; + [api updateTileOverlaysByAdding:arg_toAdd changing:arg_toChange removing:arg_idsToRemove error:&error]; callback(wrapResult(nil, error)); }]; } else { @@ -2076,18 +2025,13 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, } /// Gets the screen coordinate for the given map location. { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsApi.getScreenCoordinate", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getScreenCoordinate", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert( - [api respondsToSelector:@selector(screenCoordinatesForLatLng:error:)], - @"FGMMapsApi api (%@) doesn't respond to @selector(screenCoordinatesForLatLng:error:)", - api); + NSCAssert([api respondsToSelector:@selector(screenCoordinatesForLatLng:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(screenCoordinatesForLatLng:error:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; FGMPlatformLatLng *arg_latLng = GetNullableObjectAtIndex(args, 0); @@ -2101,25 +2045,18 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, } /// Gets the map location for the given screen coordinate. { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName: - [NSString - stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getLatLng", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getLatLng", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert( - [api respondsToSelector:@selector(latLngForScreenCoordinate:error:)], - @"FGMMapsApi api (%@) doesn't respond to @selector(latLngForScreenCoordinate:error:)", - api); + NSCAssert([api respondsToSelector:@selector(latLngForScreenCoordinate:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(latLngForScreenCoordinate:error:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; FGMPlatformPoint *arg_screenCoordinate = GetNullableObjectAtIndex(args, 0); FlutterError *error; - FGMPlatformLatLng *output = [api latLngForScreenCoordinate:arg_screenCoordinate - error:&error]; + FGMPlatformLatLng *output = [api latLngForScreenCoordinate:arg_screenCoordinate error:&error]; callback(wrapResult(output, error)); }]; } else { @@ -2128,16 +2065,13 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, } /// Gets the map region currently displayed on the map. { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsApi.getVisibleRegion", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getVisibleRegion", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(visibleMapRegion:)], - @"FGMMapsApi api (%@) doesn't respond to @selector(visibleMapRegion:)", api); + NSCAssert([api respondsToSelector:@selector(visibleMapRegion:)], @"FGMMapsApi api (%@) doesn't respond to @selector(visibleMapRegion:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; FGMPlatformLatLngBounds *output = [api visibleMapRegion:&error]; @@ -2150,18 +2084,13 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, /// Moves the camera according to [cameraUpdate] immediately, with no /// animation. { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString - stringWithFormat: - @"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.moveCamera", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.moveCamera", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(moveCameraWithUpdate:error:)], - @"FGMMapsApi api (%@) doesn't respond to @selector(moveCameraWithUpdate:error:)", - api); + NSCAssert([api respondsToSelector:@selector(moveCameraWithUpdate:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(moveCameraWithUpdate:error:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; FGMPlatformCameraUpdate *arg_cameraUpdate = GetNullableObjectAtIndex(args, 0); @@ -2175,18 +2104,13 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, } /// Moves the camera according to [cameraUpdate], animating the update. { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString - stringWithFormat: - @"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.animateCamera", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.animateCamera", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(animateCameraWithUpdate:error:)], - @"FGMMapsApi api (%@) doesn't respond to @selector(animateCameraWithUpdate:error:)", - api); + NSCAssert([api respondsToSelector:@selector(animateCameraWithUpdate:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(animateCameraWithUpdate:error:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; FGMPlatformCameraUpdate *arg_cameraUpdate = GetNullableObjectAtIndex(args, 0); @@ -2200,17 +2124,13 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, } /// Gets the current map zoom level. { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString - stringWithFormat: - @"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getZoomLevel", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getZoomLevel", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(currentZoomLevel:)], - @"FGMMapsApi api (%@) doesn't respond to @selector(currentZoomLevel:)", api); + NSCAssert([api respondsToSelector:@selector(currentZoomLevel:)], @"FGMMapsApi api (%@) doesn't respond to @selector(currentZoomLevel:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; NSNumber *output = [api currentZoomLevel:&error]; @@ -2222,18 +2142,13 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, } /// Show the info window for the marker with the given ID. { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsApi.showInfoWindow", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.showInfoWindow", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(showInfoWindowForMarkerWithIdentifier:error:)], - @"FGMMapsApi api (%@) doesn't respond to " - @"@selector(showInfoWindowForMarkerWithIdentifier:error:)", - api); + NSCAssert([api respondsToSelector:@selector(showInfoWindowForMarkerWithIdentifier:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(showInfoWindowForMarkerWithIdentifier:error:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSString *arg_markerId = GetNullableObjectAtIndex(args, 0); @@ -2247,18 +2162,13 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, } /// Hide the info window for the marker with the given ID. { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsApi.hideInfoWindow", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.hideInfoWindow", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(hideInfoWindowForMarkerWithIdentifier:error:)], - @"FGMMapsApi api (%@) doesn't respond to " - @"@selector(hideInfoWindowForMarkerWithIdentifier:error:)", - api); + NSCAssert([api respondsToSelector:@selector(hideInfoWindowForMarkerWithIdentifier:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(hideInfoWindowForMarkerWithIdentifier:error:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSString *arg_markerId = GetNullableObjectAtIndex(args, 0); @@ -2273,25 +2183,18 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, /// Returns true if the marker with the given ID is currently displaying its /// info window. { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsApi.isInfoWindowShown", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.isInfoWindowShown", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(isShowingInfoWindowForMarkerWithIdentifier: - error:)], - @"FGMMapsApi api (%@) doesn't respond to " - @"@selector(isShowingInfoWindowForMarkerWithIdentifier:error:)", - api); + NSCAssert([api respondsToSelector:@selector(isShowingInfoWindowForMarkerWithIdentifier:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(isShowingInfoWindowForMarkerWithIdentifier:error:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSString *arg_markerId = GetNullableObjectAtIndex(args, 0); FlutterError *error; - NSNumber *output = [api isShowingInfoWindowForMarkerWithIdentifier:arg_markerId - error:&error]; + NSNumber *output = [api isShowingInfoWindowForMarkerWithIdentifier:arg_markerId error:&error]; callback(wrapResult(output, error)); }]; } else { @@ -2304,17 +2207,13 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, /// If there was an error setting the style, such as an invalid style string, /// returns the error message. { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName: - [NSString - stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.setStyle", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.setStyle", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(setStyle:error:)], - @"FGMMapsApi api (%@) doesn't respond to @selector(setStyle:error:)", api); + NSCAssert([api respondsToSelector:@selector(setStyle:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(setStyle:error:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSString *arg_style = GetNullableObjectAtIndex(args, 0); @@ -2332,16 +2231,13 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, /// This allows checking asynchronously for initial style failures, as there /// is no way to return failures from map initialization. { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsApi.getLastStyleError", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getLastStyleError", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(lastStyleError:)], - @"FGMMapsApi api (%@) doesn't respond to @selector(lastStyleError:)", api); + NSCAssert([api respondsToSelector:@selector(lastStyleError:)], @"FGMMapsApi api (%@) doesn't respond to @selector(lastStyleError:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; NSString *output = [api lastStyleError:&error]; @@ -2353,18 +2249,13 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, } /// Clears the cache of tiles previously requseted from the tile provider. { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsApi.clearTileCache", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.clearTileCache", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(clearTileCacheForOverlayWithIdentifier:error:)], - @"FGMMapsApi api (%@) doesn't respond to " - @"@selector(clearTileCacheForOverlayWithIdentifier:error:)", - api); + NSCAssert([api respondsToSelector:@selector(clearTileCacheForOverlayWithIdentifier:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(clearTileCacheForOverlayWithIdentifier:error:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSString *arg_tileOverlayId = GetNullableObjectAtIndex(args, 0); @@ -2378,17 +2269,13 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, } /// Takes a snapshot of the map and returns its image data. { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString - stringWithFormat: - @"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.takeSnapshot", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.takeSnapshot", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(takeSnapshotWithError:)], - @"FGMMapsApi api (%@) doesn't respond to @selector(takeSnapshotWithError:)", api); + NSCAssert([api respondsToSelector:@selector(takeSnapshotWithError:)], @"FGMMapsApi api (%@) doesn't respond to @selector(takeSnapshotWithError:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; FlutterStandardTypedData *output = [api takeSnapshotWithError:&error]; @@ -2409,425 +2296,316 @@ @implementation FGMMapsCallbackApi - (instancetype)initWithBinaryMessenger:(NSObject *)binaryMessenger { return [self initWithBinaryMessenger:binaryMessenger messageChannelSuffix:@""]; } -- (instancetype)initWithBinaryMessenger:(NSObject *)binaryMessenger - messageChannelSuffix:(nullable NSString *)messageChannelSuffix { +- (instancetype)initWithBinaryMessenger:(NSObject *)binaryMessenger messageChannelSuffix:(nullable NSString*)messageChannelSuffix{ self = [self init]; if (self) { _binaryMessenger = binaryMessenger; - _messageChannelSuffix = [messageChannelSuffix length] == 0 - ? @"" - : [NSString stringWithFormat:@".%@", messageChannelSuffix]; + _messageChannelSuffix = [messageChannelSuffix length] == 0 ? @"" : [NSString stringWithFormat: @".%@", messageChannelSuffix]; } return self; } - (void)didStartCameraMoveWithCompletion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString - stringWithFormat: - @"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraMoveStarted", - _messageChannelSuffix]; + NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraMoveStarted", _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:nil - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)didMoveCameraToPosition:(FGMPlatformCameraPosition *)arg_cameraPosition - completion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString - stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraMove", - _messageChannelSuffix]; + [FlutterBasicMessageChannel + messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:nil reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)didMoveCameraToPosition:(FGMPlatformCameraPosition *)arg_cameraPosition completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraMove", _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[ arg_cameraPosition ?: [NSNull null] ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; + [FlutterBasicMessageChannel + messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[arg_cameraPosition ?: [NSNull null]] reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; } - (void)didIdleCameraWithCompletion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString - stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraIdle", - _messageChannelSuffix]; + NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraIdle", _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:nil - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)didTapAtPosition:(FGMPlatformLatLng *)arg_position - completion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString - stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onTap", - _messageChannelSuffix]; + [FlutterBasicMessageChannel + messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:nil reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)didTapAtPosition:(FGMPlatformLatLng *)arg_position completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onTap", _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[ arg_position ?: [NSNull null] ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)didLongPressAtPosition:(FGMPlatformLatLng *)arg_position - completion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString - stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onLongPress", - _messageChannelSuffix]; + [FlutterBasicMessageChannel + messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[arg_position ?: [NSNull null]] reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)didLongPressAtPosition:(FGMPlatformLatLng *)arg_position completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onLongPress", _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[ arg_position ?: [NSNull null] ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)didTapMarkerWithIdentifier:(NSString *)arg_markerId - completion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString - stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerTap", - _messageChannelSuffix]; + [FlutterBasicMessageChannel + messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[arg_position ?: [NSNull null]] reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)didTapMarkerWithIdentifier:(NSString *)arg_markerId completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerTap", _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[ arg_markerId ?: [NSNull null] ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)didStartDragForMarkerWithIdentifier:(NSString *)arg_markerId - atPosition:(FGMPlatformLatLng *)arg_position - completion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString - stringWithFormat: - @"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDragStart", - _messageChannelSuffix]; + [FlutterBasicMessageChannel + messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[arg_markerId ?: [NSNull null]] reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)didStartDragForMarkerWithIdentifier:(NSString *)arg_markerId atPosition:(FGMPlatformLatLng *)arg_position completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDragStart", _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[ arg_markerId ?: [NSNull null], arg_position ?: [NSNull null] ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)didDragMarkerWithIdentifier:(NSString *)arg_markerId - atPosition:(FGMPlatformLatLng *)arg_position - completion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString - stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDrag", - _messageChannelSuffix]; + [FlutterBasicMessageChannel + messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[arg_markerId ?: [NSNull null], arg_position ?: [NSNull null]] reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)didDragMarkerWithIdentifier:(NSString *)arg_markerId atPosition:(FGMPlatformLatLng *)arg_position completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDrag", _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[ arg_markerId ?: [NSNull null], arg_position ?: [NSNull null] ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)didEndDragForMarkerWithIdentifier:(NSString *)arg_markerId - atPosition:(FGMPlatformLatLng *)arg_position - completion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString - stringWithFormat: - @"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDragEnd", - _messageChannelSuffix]; + [FlutterBasicMessageChannel + messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[arg_markerId ?: [NSNull null], arg_position ?: [NSNull null]] reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)didEndDragForMarkerWithIdentifier:(NSString *)arg_markerId atPosition:(FGMPlatformLatLng *)arg_position completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDragEnd", _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[ arg_markerId ?: [NSNull null], arg_position ?: [NSNull null] ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)didTapInfoWindowOfMarkerWithIdentifier:(NSString *)arg_markerId - completion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString - stringWithFormat: - @"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onInfoWindowTap", - _messageChannelSuffix]; + [FlutterBasicMessageChannel + messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[arg_markerId ?: [NSNull null], arg_position ?: [NSNull null]] reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)didTapInfoWindowOfMarkerWithIdentifier:(NSString *)arg_markerId completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onInfoWindowTap", _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[ arg_markerId ?: [NSNull null] ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)didTapCircleWithIdentifier:(NSString *)arg_circleId - completion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString - stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCircleTap", - _messageChannelSuffix]; + [FlutterBasicMessageChannel + messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[arg_markerId ?: [NSNull null]] reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)didTapCircleWithIdentifier:(NSString *)arg_circleId completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCircleTap", _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[ arg_circleId ?: [NSNull null] ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)didTapCluster:(FGMPlatformCluster *)arg_cluster - completion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString - stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onClusterTap", - _messageChannelSuffix]; + [FlutterBasicMessageChannel + messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[arg_circleId ?: [NSNull null]] reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)didTapCluster:(FGMPlatformCluster *)arg_cluster completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onClusterTap", _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[ arg_cluster ?: [NSNull null] ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)didTapPolygonWithIdentifier:(NSString *)arg_polygonId - completion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString - stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onPolygonTap", - _messageChannelSuffix]; + [FlutterBasicMessageChannel + messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[arg_cluster ?: [NSNull null]] reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)didTapPolygonWithIdentifier:(NSString *)arg_polygonId completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onPolygonTap", _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[ arg_polygonId ?: [NSNull null] ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)didTapPolylineWithIdentifier:(NSString *)arg_polylineId - completion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString - stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onPolylineTap", - _messageChannelSuffix]; + [FlutterBasicMessageChannel + messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[arg_polygonId ?: [NSNull null]] reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)didTapPolylineWithIdentifier:(NSString *)arg_polylineId completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onPolylineTap", _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[ arg_polylineId ?: [NSNull null] ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)tileWithOverlayIdentifier:(NSString *)arg_tileOverlayId - location:(FGMPlatformPoint *)arg_location - zoom:(NSInteger)arg_zoom - completion:(void (^)(FGMPlatformTile *_Nullable, - FlutterError *_Nullable))completion { - NSString *channelName = [NSString - stringWithFormat: - @"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.getTileOverlayTile", - _messageChannelSuffix]; + [FlutterBasicMessageChannel + messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[arg_polylineId ?: [NSNull null]] reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)tileWithOverlayIdentifier:(NSString *)arg_tileOverlayId location:(FGMPlatformPoint *)arg_location zoom:(NSInteger)arg_zoom completion:(void (^)(FGMPlatformTile *_Nullable, FlutterError *_Nullable))completion { + NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.getTileOverlayTile", _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[ - arg_tileOverlayId ?: [NSNull null], arg_location ?: [NSNull null], @(arg_zoom) - ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion(nil, [FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - FGMPlatformTile *output = reply[0] == [NSNull null] ? nil : reply[0]; - completion(output, nil); - } - } else { - completion(nil, createConnectionError(channelName)); - } - }]; -} -@end - -void SetUpFGMMapsPlatformViewApi(id binaryMessenger, - NSObject *api) { + [FlutterBasicMessageChannel + messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[arg_tileOverlayId ?: [NSNull null], arg_location ?: [NSNull null], @(arg_zoom)] reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion(nil, [FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); + } else { + FGMPlatformTile *output = reply[0] == [NSNull null] ? nil : reply[0]; + completion(output, nil); + } + } else { + completion(nil, createConnectionError(channelName)); + } + }]; +} +@end + +void SetUpFGMMapsPlatformViewApi(id binaryMessenger, NSObject *api) { SetUpFGMMapsPlatformViewApiWithSuffix(binaryMessenger, api, @""); } -void SetUpFGMMapsPlatformViewApiWithSuffix(id binaryMessenger, - NSObject *api, - NSString *messageChannelSuffix) { - messageChannelSuffix = messageChannelSuffix.length > 0 - ? [NSString stringWithFormat:@".%@", messageChannelSuffix] - : @""; +void SetUpFGMMapsPlatformViewApiWithSuffix(id binaryMessenger, NSObject *api, NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 ? [NSString stringWithFormat: @".%@", messageChannelSuffix] : @""; { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsPlatformViewApi.createView", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsPlatformViewApi.createView", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert( - [api respondsToSelector:@selector(createViewType:error:)], - @"FGMMapsPlatformViewApi api (%@) doesn't respond to @selector(createViewType:error:)", - api); + NSCAssert([api respondsToSelector:@selector(createViewType:error:)], @"FGMMapsPlatformViewApi api (%@) doesn't respond to @selector(createViewType:error:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; FGMPlatformMapViewCreationParams *arg_type = GetNullableObjectAtIndex(args, 0); @@ -2840,30 +2618,20 @@ void SetUpFGMMapsPlatformViewApiWithSuffix(id binaryMess } } } -void SetUpFGMMapsInspectorApi(id binaryMessenger, - NSObject *api) { +void SetUpFGMMapsInspectorApi(id binaryMessenger, NSObject *api) { SetUpFGMMapsInspectorApiWithSuffix(binaryMessenger, api, @""); } -void SetUpFGMMapsInspectorApiWithSuffix(id binaryMessenger, - NSObject *api, - NSString *messageChannelSuffix) { - messageChannelSuffix = messageChannelSuffix.length > 0 - ? [NSString stringWithFormat:@".%@", messageChannelSuffix] - : @""; +void SetUpFGMMapsInspectorApiWithSuffix(id binaryMessenger, NSObject *api, NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 ? [NSString stringWithFormat: @".%@", messageChannelSuffix] : @""; { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsInspectorApi.areBuildingsEnabled", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areBuildingsEnabled", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(areBuildingsEnabledWithError:)], - @"FGMMapsInspectorApi api (%@) doesn't respond to " - @"@selector(areBuildingsEnabledWithError:)", - api); + NSCAssert([api respondsToSelector:@selector(areBuildingsEnabledWithError:)], @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(areBuildingsEnabledWithError:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; NSNumber *output = [api areBuildingsEnabledWithError:&error]; @@ -2874,18 +2642,13 @@ void SetUpFGMMapsInspectorApiWithSuffix(id binaryMesseng } } { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsInspectorApi.areRotateGesturesEnabled", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areRotateGesturesEnabled", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(areRotateGesturesEnabledWithError:)], - @"FGMMapsInspectorApi api (%@) doesn't respond to " - @"@selector(areRotateGesturesEnabledWithError:)", - api); + NSCAssert([api respondsToSelector:@selector(areRotateGesturesEnabledWithError:)], @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(areRotateGesturesEnabledWithError:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; NSNumber *output = [api areRotateGesturesEnabledWithError:&error]; @@ -2896,18 +2659,13 @@ void SetUpFGMMapsInspectorApiWithSuffix(id binaryMesseng } } { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsInspectorApi.areScrollGesturesEnabled", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areScrollGesturesEnabled", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(areScrollGesturesEnabledWithError:)], - @"FGMMapsInspectorApi api (%@) doesn't respond to " - @"@selector(areScrollGesturesEnabledWithError:)", - api); + NSCAssert([api respondsToSelector:@selector(areScrollGesturesEnabledWithError:)], @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(areScrollGesturesEnabledWithError:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; NSNumber *output = [api areScrollGesturesEnabledWithError:&error]; @@ -2918,18 +2676,13 @@ void SetUpFGMMapsInspectorApiWithSuffix(id binaryMesseng } } { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsInspectorApi.areTiltGesturesEnabled", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areTiltGesturesEnabled", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(areTiltGesturesEnabledWithError:)], - @"FGMMapsInspectorApi api (%@) doesn't respond to " - @"@selector(areTiltGesturesEnabledWithError:)", - api); + NSCAssert([api respondsToSelector:@selector(areTiltGesturesEnabledWithError:)], @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(areTiltGesturesEnabledWithError:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; NSNumber *output = [api areTiltGesturesEnabledWithError:&error]; @@ -2940,18 +2693,13 @@ void SetUpFGMMapsInspectorApiWithSuffix(id binaryMesseng } } { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsInspectorApi.areZoomGesturesEnabled", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areZoomGesturesEnabled", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(areZoomGesturesEnabledWithError:)], - @"FGMMapsInspectorApi api (%@) doesn't respond to " - @"@selector(areZoomGesturesEnabledWithError:)", - api); + NSCAssert([api respondsToSelector:@selector(areZoomGesturesEnabledWithError:)], @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(areZoomGesturesEnabledWithError:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; NSNumber *output = [api areZoomGesturesEnabledWithError:&error]; @@ -2962,18 +2710,13 @@ void SetUpFGMMapsInspectorApiWithSuffix(id binaryMesseng } } { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsInspectorApi.isCompassEnabled", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.isCompassEnabled", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert( - [api respondsToSelector:@selector(isCompassEnabledWithError:)], - @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(isCompassEnabledWithError:)", - api); + NSCAssert([api respondsToSelector:@selector(isCompassEnabledWithError:)], @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(isCompassEnabledWithError:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; NSNumber *output = [api isCompassEnabledWithError:&error]; @@ -2984,18 +2727,13 @@ void SetUpFGMMapsInspectorApiWithSuffix(id binaryMesseng } } { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsInspectorApi.isMyLocationButtonEnabled", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.isMyLocationButtonEnabled", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(isMyLocationButtonEnabledWithError:)], - @"FGMMapsInspectorApi api (%@) doesn't respond to " - @"@selector(isMyLocationButtonEnabledWithError:)", - api); + NSCAssert([api respondsToSelector:@selector(isMyLocationButtonEnabledWithError:)], @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(isMyLocationButtonEnabledWithError:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; NSNumber *output = [api isMyLocationButtonEnabledWithError:&error]; @@ -3006,18 +2744,13 @@ void SetUpFGMMapsInspectorApiWithSuffix(id binaryMesseng } } { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsInspectorApi.isTrafficEnabled", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.isTrafficEnabled", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert( - [api respondsToSelector:@selector(isTrafficEnabledWithError:)], - @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(isTrafficEnabledWithError:)", - api); + NSCAssert([api respondsToSelector:@selector(isTrafficEnabledWithError:)], @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(isTrafficEnabledWithError:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; NSNumber *output = [api isTrafficEnabledWithError:&error]; @@ -3028,24 +2761,18 @@ void SetUpFGMMapsInspectorApiWithSuffix(id binaryMesseng } } { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsInspectorApi.getTileOverlayInfo", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.getTileOverlayInfo", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(tileOverlayWithIdentifier:error:)], - @"FGMMapsInspectorApi api (%@) doesn't respond to " - @"@selector(tileOverlayWithIdentifier:error:)", - api); + NSCAssert([api respondsToSelector:@selector(tileOverlayWithIdentifier:error:)], @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(tileOverlayWithIdentifier:error:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSString *arg_tileOverlayId = GetNullableObjectAtIndex(args, 0); FlutterError *error; - FGMPlatformTileLayer *output = [api tileOverlayWithIdentifier:arg_tileOverlayId - error:&error]; + FGMPlatformTileLayer *output = [api tileOverlayWithIdentifier:arg_tileOverlayId error:&error]; callback(wrapResult(output, error)); }]; } else { @@ -3053,18 +2780,13 @@ void SetUpFGMMapsInspectorApiWithSuffix(id binaryMesseng } } { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsInspectorApi.getHeatmapInfo", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.getHeatmapInfo", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(heatmapWithIdentifier:error:)], - @"FGMMapsInspectorApi api (%@) doesn't respond to " - @"@selector(heatmapWithIdentifier:error:)", - api); + NSCAssert([api respondsToSelector:@selector(heatmapWithIdentifier:error:)], @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(heatmapWithIdentifier:error:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSString *arg_heatmapId = GetNullableObjectAtIndex(args, 0); @@ -3077,16 +2799,13 @@ void SetUpFGMMapsInspectorApiWithSuffix(id binaryMesseng } } { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsInspectorApi.getZoomRange", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.getZoomRange", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(zoomRange:)], - @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(zoomRange:)", api); + NSCAssert([api respondsToSelector:@selector(zoomRange:)], @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(zoomRange:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; FGMPlatformZoomRange *output = [api zoomRange:&error]; @@ -3097,24 +2816,18 @@ void SetUpFGMMapsInspectorApiWithSuffix(id binaryMesseng } } { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.google_maps_flutter_ios." - @"MapsInspectorApi.getClusters", - messageChannelSuffix] + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.getClusters", messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(clustersWithIdentifier:error:)], - @"FGMMapsInspectorApi api (%@) doesn't respond to " - @"@selector(clustersWithIdentifier:error:)", - api); + NSCAssert([api respondsToSelector:@selector(clustersWithIdentifier:error:)], @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(clustersWithIdentifier:error:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSString *arg_clusterManagerId = GetNullableObjectAtIndex(args, 0); FlutterError *error; - NSArray *output = [api clustersWithIdentifier:arg_clusterManagerId - error:&error]; + NSArray *output = [api clustersWithIdentifier:arg_clusterManagerId error:&error]; callback(wrapResult(output, error)); }]; } else { @@ -3122,3 +2835,69 @@ void SetUpFGMMapsInspectorApiWithSuffix(id binaryMesseng } } } +void SetUpFGMImageRegistryApi(id binaryMessenger, NSObject *api) { + SetUpFGMImageRegistryApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpFGMImageRegistryApiWithSuffix(id binaryMessenger, NSObject *api, NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 ? [NSString stringWithFormat: @".%@", messageChannelSuffix] : @""; + /// Adds a bitmap to the cache. + { + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.ImageRegistryApi.addBitmapToCache", messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:FGMGetMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(addBitmapToCacheId:bitmap:error:)], @"FGMImageRegistryApi api (%@) doesn't respond to @selector(addBitmapToCacheId:bitmap:error:)", api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSInteger arg_id = [GetNullableObjectAtIndex(args, 0) integerValue]; + FGMPlatformBitmap *arg_bitmap = GetNullableObjectAtIndex(args, 1); + FlutterError *error; + [api addBitmapToCacheId:arg_id bitmap:arg_bitmap error:&error]; + callback(wrapResult(nil, error)); + }]; + } else { + [channel setMessageHandler:nil]; + } + } + /// Retrieves a bitmap from the cache. + { + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.ImageRegistryApi.removeBitmapFromCache", messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:FGMGetMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(removeBitmapFromCacheId:error:)], @"FGMImageRegistryApi api (%@) doesn't respond to @selector(removeBitmapFromCacheId:error:)", api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSInteger arg_id = [GetNullableObjectAtIndex(args, 0) integerValue]; + FlutterError *error; + [api removeBitmapFromCacheId:arg_id error:&error]; + callback(wrapResult(nil, error)); + }]; + } else { + [channel setMessageHandler:nil]; + } + } + /// Clears the bitmap cache. + { + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.ImageRegistryApi.clearBitmapCache", messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:FGMGetMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(clearBitmapCacheWithError:)], @"FGMImageRegistryApi api (%@) doesn't respond to @selector(clearBitmapCacheWithError:)", api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + FlutterError *error; + [api clearBitmapCacheWithError:&error]; + callback(wrapResult(nil, error)); + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/google_maps_flutter_ios.dart b/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/google_maps_flutter_ios.dart index 89c6b90ddc6..35b1926d468 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/google_maps_flutter_ios.dart +++ b/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/google_maps_flutter_ios.dart @@ -441,6 +441,23 @@ class GoogleMapsFlutterIOS extends GoogleMapsFlutterPlatform { return _hostApi(mapId).getLastStyleError(); } + @override + Future registerBitmap(int id, MapBitmap bitmap) { + final PlatformBitmap platformBitmap = + platformBitmapFromBitmapDescriptor(bitmap); + return ImageRegistryApi().addBitmapToCache(id, platformBitmap); + } + + @override + Future unregisterBitmap(int id) { + return ImageRegistryApi().removeBitmapFromCache(id); + } + + @override + Future clearBitmapCache() { + return ImageRegistryApi().clearBitmapCache(); + } + Widget _buildView( int creationId, PlatformViewCreatedCallback onPlatformViewCreated, { @@ -811,6 +828,10 @@ class GoogleMapsFlutterIOS extends GoogleMapsFlutterPlatform { imagePixelRatio: bytes.imagePixelRatio, width: bytes.width, height: bytes.height)); + case final RegisteredMapBitmap registeredBitmap: + return PlatformBitmap( + bitmap: PlatformBitmapRegisteredMapBitmap(id: registeredBitmap.id), + ); default: throw ArgumentError( 'Unrecognized type of bitmap ${bitmap.runtimeType}', 'bitmap'); diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/messages.g.dart b/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/messages.g.dart index 30a3e4e138d..9747a7e1776 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/messages.g.dart +++ b/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/messages.g.dart @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v22.6.1), do not edit directly. +// Autogenerated from Pigeon (v22.7.2), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import, no_leading_underscores_for_local_identifiers @@ -18,8 +18,7 @@ PlatformException _createConnectionError(String channelName) { ); } -List wrapResponse( - {Object? result, PlatformException? error, bool empty = false}) { +List wrapResponse({Object? result, PlatformException? error, bool empty = false}) { if (empty) { return []; } @@ -991,10 +990,8 @@ class PlatformMapViewCreationParams { initialPolygons: (result[4] as List?)!.cast(), initialPolylines: (result[5] as List?)!.cast(), initialHeatmaps: (result[6] as List?)!.cast(), - initialTileOverlays: - (result[7] as List?)!.cast(), - initialClusterManagers: - (result[8] as List?)!.cast(), + initialTileOverlays: (result[7] as List?)!.cast(), + initialClusterManagers: (result[8] as List?)!.cast(), ); } } @@ -1250,8 +1247,7 @@ class PlatformBitmap { } } -/// Pigeon equivalent of [DefaultMarker]. See -/// https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/BitmapDescriptorFactory#defaultMarker(float) +/// Pigeon equivalent of [DefaultMarker]. class PlatformBitmapDefaultMarker { PlatformBitmapDefaultMarker({ this.hue, @@ -1273,8 +1269,7 @@ class PlatformBitmapDefaultMarker { } } -/// Pigeon equivalent of [BytesBitmap]. See -/// https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/BitmapDescriptorFactory#fromBitmap(android.graphics.Bitmap) +/// Pigeon equivalent of [BytesBitmap]. class PlatformBitmapBytes { PlatformBitmapBytes({ required this.byteData, @@ -1301,8 +1296,7 @@ class PlatformBitmapBytes { } } -/// Pigeon equivalent of [AssetBitmap]. See -/// https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/BitmapDescriptorFactory#public-static-bitmapdescriptor-fromasset-string-assetname +/// Pigeon equivalent of [AssetBitmap]. class PlatformBitmapAsset { PlatformBitmapAsset({ required this.name, @@ -1329,8 +1323,7 @@ class PlatformBitmapAsset { } } -/// Pigeon equivalent of [AssetImageBitmap]. See -/// https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/BitmapDescriptorFactory#public-static-bitmapdescriptor-fromasset-string-assetname +/// Pigeon equivalent of [AssetImageBitmap]. class PlatformBitmapAssetImage { PlatformBitmapAssetImage({ required this.name, @@ -1362,8 +1355,7 @@ class PlatformBitmapAssetImage { } } -/// Pigeon equivalent of [AssetMapBitmap]. See -/// https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/BitmapDescriptorFactory#public-static-bitmapdescriptor-fromasset-string-assetname +/// Pigeon equivalent of [AssetMapBitmap]. class PlatformBitmapAssetMap { PlatformBitmapAssetMap({ required this.assetName, @@ -1405,8 +1397,7 @@ class PlatformBitmapAssetMap { } } -/// Pigeon equivalent of [BytesMapBitmap]. See -/// https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/BitmapDescriptorFactory#public-static-bitmapdescriptor-frombitmap-bitmap-image +/// Pigeon equivalent of [BytesMapBitmap]. class PlatformBitmapBytesMap { PlatformBitmapBytesMap({ required this.byteData, @@ -1448,6 +1439,29 @@ class PlatformBitmapBytesMap { } } +/// Pigeon equivalent of a registered bitmap. +class PlatformBitmapRegisteredMapBitmap { + PlatformBitmapRegisteredMapBitmap({ + required this.id, + }); + + int id; + + Object encode() { + return [ + id, + ]; + } + + static PlatformBitmapRegisteredMapBitmap decode(Object result) { + result as List; + return PlatformBitmapRegisteredMapBitmap( + id: result[0]! as int, + ); + } +} + + class _PigeonCodec extends StandardMessageCodec { const _PigeonCodec(); @override @@ -1455,132 +1469,135 @@ class _PigeonCodec extends StandardMessageCodec { if (value is int) { buffer.putUint8(4); buffer.putInt64(value); - } else if (value is PlatformMapType) { + } else if (value is PlatformMapType) { buffer.putUint8(129); writeValue(buffer, value.index); - } else if (value is PlatformJointType) { + } else if (value is PlatformJointType) { buffer.putUint8(130); writeValue(buffer, value.index); - } else if (value is PlatformPatternItemType) { + } else if (value is PlatformPatternItemType) { buffer.putUint8(131); writeValue(buffer, value.index); - } else if (value is PlatformMapBitmapScaling) { + } else if (value is PlatformMapBitmapScaling) { buffer.putUint8(132); writeValue(buffer, value.index); - } else if (value is PlatformCameraPosition) { + } else if (value is PlatformCameraPosition) { buffer.putUint8(133); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdate) { + } else if (value is PlatformCameraUpdate) { buffer.putUint8(134); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateNewCameraPosition) { + } else if (value is PlatformCameraUpdateNewCameraPosition) { buffer.putUint8(135); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateNewLatLng) { + } else if (value is PlatformCameraUpdateNewLatLng) { buffer.putUint8(136); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateNewLatLngBounds) { + } else if (value is PlatformCameraUpdateNewLatLngBounds) { buffer.putUint8(137); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateNewLatLngZoom) { + } else if (value is PlatformCameraUpdateNewLatLngZoom) { buffer.putUint8(138); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateScrollBy) { + } else if (value is PlatformCameraUpdateScrollBy) { buffer.putUint8(139); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateZoomBy) { + } else if (value is PlatformCameraUpdateZoomBy) { buffer.putUint8(140); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateZoom) { + } else if (value is PlatformCameraUpdateZoom) { buffer.putUint8(141); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateZoomTo) { + } else if (value is PlatformCameraUpdateZoomTo) { buffer.putUint8(142); writeValue(buffer, value.encode()); - } else if (value is PlatformCircle) { + } else if (value is PlatformCircle) { buffer.putUint8(143); writeValue(buffer, value.encode()); - } else if (value is PlatformHeatmap) { + } else if (value is PlatformHeatmap) { buffer.putUint8(144); writeValue(buffer, value.encode()); - } else if (value is PlatformInfoWindow) { + } else if (value is PlatformInfoWindow) { buffer.putUint8(145); writeValue(buffer, value.encode()); - } else if (value is PlatformCluster) { + } else if (value is PlatformCluster) { buffer.putUint8(146); writeValue(buffer, value.encode()); - } else if (value is PlatformClusterManager) { + } else if (value is PlatformClusterManager) { buffer.putUint8(147); writeValue(buffer, value.encode()); - } else if (value is PlatformMarker) { + } else if (value is PlatformMarker) { buffer.putUint8(148); writeValue(buffer, value.encode()); - } else if (value is PlatformPolygon) { + } else if (value is PlatformPolygon) { buffer.putUint8(149); writeValue(buffer, value.encode()); - } else if (value is PlatformPolyline) { + } else if (value is PlatformPolyline) { buffer.putUint8(150); writeValue(buffer, value.encode()); - } else if (value is PlatformPatternItem) { + } else if (value is PlatformPatternItem) { buffer.putUint8(151); writeValue(buffer, value.encode()); - } else if (value is PlatformTile) { + } else if (value is PlatformTile) { buffer.putUint8(152); writeValue(buffer, value.encode()); - } else if (value is PlatformTileOverlay) { + } else if (value is PlatformTileOverlay) { buffer.putUint8(153); writeValue(buffer, value.encode()); - } else if (value is PlatformEdgeInsets) { + } else if (value is PlatformEdgeInsets) { buffer.putUint8(154); writeValue(buffer, value.encode()); - } else if (value is PlatformLatLng) { + } else if (value is PlatformLatLng) { buffer.putUint8(155); writeValue(buffer, value.encode()); - } else if (value is PlatformLatLngBounds) { + } else if (value is PlatformLatLngBounds) { buffer.putUint8(156); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraTargetBounds) { + } else if (value is PlatformCameraTargetBounds) { buffer.putUint8(157); writeValue(buffer, value.encode()); - } else if (value is PlatformMapViewCreationParams) { + } else if (value is PlatformMapViewCreationParams) { buffer.putUint8(158); writeValue(buffer, value.encode()); - } else if (value is PlatformMapConfiguration) { + } else if (value is PlatformMapConfiguration) { buffer.putUint8(159); writeValue(buffer, value.encode()); - } else if (value is PlatformPoint) { + } else if (value is PlatformPoint) { buffer.putUint8(160); writeValue(buffer, value.encode()); - } else if (value is PlatformSize) { + } else if (value is PlatformSize) { buffer.putUint8(161); writeValue(buffer, value.encode()); - } else if (value is PlatformTileLayer) { + } else if (value is PlatformTileLayer) { buffer.putUint8(162); writeValue(buffer, value.encode()); - } else if (value is PlatformZoomRange) { + } else if (value is PlatformZoomRange) { buffer.putUint8(163); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmap) { + } else if (value is PlatformBitmap) { buffer.putUint8(164); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapDefaultMarker) { + } else if (value is PlatformBitmapDefaultMarker) { buffer.putUint8(165); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapBytes) { + } else if (value is PlatformBitmapBytes) { buffer.putUint8(166); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapAsset) { + } else if (value is PlatformBitmapAsset) { buffer.putUint8(167); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapAssetImage) { + } else if (value is PlatformBitmapAssetImage) { buffer.putUint8(168); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapAssetMap) { + } else if (value is PlatformBitmapAssetMap) { buffer.putUint8(169); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapBytesMap) { + } else if (value is PlatformBitmapBytesMap) { buffer.putUint8(170); writeValue(buffer, value.encode()); + } else if (value is PlatformBitmapRegisteredMapBitmap) { + buffer.putUint8(171); + writeValue(buffer, value.encode()); } else { super.writeValue(buffer, value); } @@ -1589,94 +1606,96 @@ class _PigeonCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 129: + case 129: final int? value = readValue(buffer) as int?; return value == null ? null : PlatformMapType.values[value]; - case 130: + case 130: final int? value = readValue(buffer) as int?; return value == null ? null : PlatformJointType.values[value]; - case 131: + case 131: final int? value = readValue(buffer) as int?; return value == null ? null : PlatformPatternItemType.values[value]; - case 132: + case 132: final int? value = readValue(buffer) as int?; return value == null ? null : PlatformMapBitmapScaling.values[value]; - case 133: + case 133: return PlatformCameraPosition.decode(readValue(buffer)!); - case 134: + case 134: return PlatformCameraUpdate.decode(readValue(buffer)!); - case 135: + case 135: return PlatformCameraUpdateNewCameraPosition.decode(readValue(buffer)!); - case 136: + case 136: return PlatformCameraUpdateNewLatLng.decode(readValue(buffer)!); - case 137: + case 137: return PlatformCameraUpdateNewLatLngBounds.decode(readValue(buffer)!); - case 138: + case 138: return PlatformCameraUpdateNewLatLngZoom.decode(readValue(buffer)!); - case 139: + case 139: return PlatformCameraUpdateScrollBy.decode(readValue(buffer)!); - case 140: + case 140: return PlatformCameraUpdateZoomBy.decode(readValue(buffer)!); - case 141: + case 141: return PlatformCameraUpdateZoom.decode(readValue(buffer)!); - case 142: + case 142: return PlatformCameraUpdateZoomTo.decode(readValue(buffer)!); - case 143: + case 143: return PlatformCircle.decode(readValue(buffer)!); - case 144: + case 144: return PlatformHeatmap.decode(readValue(buffer)!); - case 145: + case 145: return PlatformInfoWindow.decode(readValue(buffer)!); - case 146: + case 146: return PlatformCluster.decode(readValue(buffer)!); - case 147: + case 147: return PlatformClusterManager.decode(readValue(buffer)!); - case 148: + case 148: return PlatformMarker.decode(readValue(buffer)!); - case 149: + case 149: return PlatformPolygon.decode(readValue(buffer)!); - case 150: + case 150: return PlatformPolyline.decode(readValue(buffer)!); - case 151: + case 151: return PlatformPatternItem.decode(readValue(buffer)!); - case 152: + case 152: return PlatformTile.decode(readValue(buffer)!); - case 153: + case 153: return PlatformTileOverlay.decode(readValue(buffer)!); - case 154: + case 154: return PlatformEdgeInsets.decode(readValue(buffer)!); - case 155: + case 155: return PlatformLatLng.decode(readValue(buffer)!); - case 156: + case 156: return PlatformLatLngBounds.decode(readValue(buffer)!); - case 157: + case 157: return PlatformCameraTargetBounds.decode(readValue(buffer)!); - case 158: + case 158: return PlatformMapViewCreationParams.decode(readValue(buffer)!); - case 159: + case 159: return PlatformMapConfiguration.decode(readValue(buffer)!); - case 160: + case 160: return PlatformPoint.decode(readValue(buffer)!); - case 161: + case 161: return PlatformSize.decode(readValue(buffer)!); - case 162: + case 162: return PlatformTileLayer.decode(readValue(buffer)!); - case 163: + case 163: return PlatformZoomRange.decode(readValue(buffer)!); - case 164: + case 164: return PlatformBitmap.decode(readValue(buffer)!); - case 165: + case 165: return PlatformBitmapDefaultMarker.decode(readValue(buffer)!); - case 166: + case 166: return PlatformBitmapBytes.decode(readValue(buffer)!); - case 167: + case 167: return PlatformBitmapAsset.decode(readValue(buffer)!); - case 168: + case 168: return PlatformBitmapAssetImage.decode(readValue(buffer)!); - case 169: + case 169: return PlatformBitmapAssetMap.decode(readValue(buffer)!); - case 170: + case 170: return PlatformBitmapBytesMap.decode(readValue(buffer)!); + case 171: + return PlatformBitmapRegisteredMapBitmap.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); } @@ -1692,8 +1711,7 @@ class MapsApi { /// BinaryMessenger will be used which routes to the host platform. MapsApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) : pigeonVar_binaryMessenger = binaryMessenger, - pigeonVar_messageChannelSuffix = - messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; final BinaryMessenger? pigeonVar_binaryMessenger; static const MessageCodec pigeonChannelCodec = _PigeonCodec(); @@ -1702,10 +1720,8 @@ class MapsApi { /// Returns once the map instance is available. Future waitForMap() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.waitForMap$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.waitForMap$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -1729,18 +1745,15 @@ class MapsApi { /// /// Only non-null configuration values will result in updates; options with /// null values will remain unchanged. - Future updateMapConfiguration( - PlatformMapConfiguration configuration) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateMapConfiguration$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + Future updateMapConfiguration(PlatformMapConfiguration configuration) async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateMapConfiguration$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([configuration]) as List?; + final List? pigeonVar_replyList = + await pigeonVar_channel.send([configuration]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1755,18 +1768,15 @@ class MapsApi { } /// Updates the set of circles on the map. - Future updateCircles(List toAdd, - List toChange, List idsToRemove) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateCircles$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + Future updateCircles(List toAdd, List toChange, List idsToRemove) async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateCircles$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([toAdd, toChange, idsToRemove]) as List?; + final List? pigeonVar_replyList = + await pigeonVar_channel.send([toAdd, toChange, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1781,18 +1791,15 @@ class MapsApi { } /// Updates the set of heatmaps on the map. - Future updateHeatmaps(List toAdd, - List toChange, List idsToRemove) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateHeatmaps$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + Future updateHeatmaps(List toAdd, List toChange, List idsToRemove) async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateHeatmaps$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([toAdd, toChange, idsToRemove]) as List?; + final List? pigeonVar_replyList = + await pigeonVar_channel.send([toAdd, toChange, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1807,18 +1814,15 @@ class MapsApi { } /// Updates the set of custer managers for clusters on the map. - Future updateClusterManagers( - List toAdd, List idsToRemove) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateClusterManagers$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + Future updateClusterManagers(List toAdd, List idsToRemove) async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateClusterManagers$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([toAdd, idsToRemove]) as List?; + final List? pigeonVar_replyList = + await pigeonVar_channel.send([toAdd, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1833,18 +1837,15 @@ class MapsApi { } /// Updates the set of markers on the map. - Future updateMarkers(List toAdd, - List toChange, List idsToRemove) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateMarkers$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + Future updateMarkers(List toAdd, List toChange, List idsToRemove) async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateMarkers$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([toAdd, toChange, idsToRemove]) as List?; + final List? pigeonVar_replyList = + await pigeonVar_channel.send([toAdd, toChange, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1859,18 +1860,15 @@ class MapsApi { } /// Updates the set of polygonss on the map. - Future updatePolygons(List toAdd, - List toChange, List idsToRemove) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updatePolygons$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + Future updatePolygons(List toAdd, List toChange, List idsToRemove) async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updatePolygons$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([toAdd, toChange, idsToRemove]) as List?; + final List? pigeonVar_replyList = + await pigeonVar_channel.send([toAdd, toChange, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1885,18 +1883,15 @@ class MapsApi { } /// Updates the set of polylines on the map. - Future updatePolylines(List toAdd, - List toChange, List idsToRemove) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updatePolylines$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + Future updatePolylines(List toAdd, List toChange, List idsToRemove) async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updatePolylines$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([toAdd, toChange, idsToRemove]) as List?; + final List? pigeonVar_replyList = + await pigeonVar_channel.send([toAdd, toChange, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1911,18 +1906,15 @@ class MapsApi { } /// Updates the set of tile overlays on the map. - Future updateTileOverlays(List toAdd, - List toChange, List idsToRemove) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateTileOverlays$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + Future updateTileOverlays(List toAdd, List toChange, List idsToRemove) async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateTileOverlays$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([toAdd, toChange, idsToRemove]) as List?; + final List? pigeonVar_replyList = + await pigeonVar_channel.send([toAdd, toChange, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1938,10 +1930,8 @@ class MapsApi { /// Gets the screen coordinate for the given map location. Future getScreenCoordinate(PlatformLatLng latLng) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getScreenCoordinate$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getScreenCoordinate$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -1968,16 +1958,14 @@ class MapsApi { /// Gets the map location for the given screen coordinate. Future getLatLng(PlatformPoint screenCoordinate) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getLatLng$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getLatLng$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([screenCoordinate]) as List?; + final List? pigeonVar_replyList = + await pigeonVar_channel.send([screenCoordinate]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1998,10 +1986,8 @@ class MapsApi { /// Gets the map region currently displayed on the map. Future getVisibleRegion() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getVisibleRegion$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getVisibleRegion$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2029,10 +2015,8 @@ class MapsApi { /// Moves the camera according to [cameraUpdate] immediately, with no /// animation. Future moveCamera(PlatformCameraUpdate cameraUpdate) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.moveCamera$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.moveCamera$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2054,10 +2038,8 @@ class MapsApi { /// Moves the camera according to [cameraUpdate], animating the update. Future animateCamera(PlatformCameraUpdate cameraUpdate) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.animateCamera$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.animateCamera$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2079,10 +2061,8 @@ class MapsApi { /// Gets the current map zoom level. Future getZoomLevel() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getZoomLevel$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getZoomLevel$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2109,10 +2089,8 @@ class MapsApi { /// Show the info window for the marker with the given ID. Future showInfoWindow(String markerId) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.showInfoWindow$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.showInfoWindow$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2134,10 +2112,8 @@ class MapsApi { /// Hide the info window for the marker with the given ID. Future hideInfoWindow(String markerId) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.hideInfoWindow$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.hideInfoWindow$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2160,10 +2136,8 @@ class MapsApi { /// Returns true if the marker with the given ID is currently displaying its /// info window. Future isInfoWindowShown(String markerId) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.isInfoWindowShown$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.isInfoWindowShown$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2194,10 +2168,8 @@ class MapsApi { /// If there was an error setting the style, such as an invalid style string, /// returns the error message. Future setStyle(String style) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.setStyle$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.setStyle$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2223,10 +2195,8 @@ class MapsApi { /// This allows checking asynchronously for initial style failures, as there /// is no way to return failures from map initialization. Future getLastStyleError() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getLastStyleError$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getLastStyleError$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2248,16 +2218,14 @@ class MapsApi { /// Clears the cache of tiles previously requseted from the tile provider. Future clearTileCache(String tileOverlayId) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.clearTileCache$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.clearTileCache$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([tileOverlayId]) as List?; + final List? pigeonVar_replyList = + await pigeonVar_channel.send([tileOverlayId]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -2273,10 +2241,8 @@ class MapsApi { /// Takes a snapshot of the map and returns its image data. Future takeSnapshot() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.takeSnapshot$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.takeSnapshot$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2344,22 +2310,13 @@ abstract class MapsCallbackApi { void onPolylineTap(String polylineId); /// Called to get data for a map tile. - Future getTileOverlayTile( - String tileOverlayId, PlatformPoint location, int zoom); - - static void setUp( - MapsCallbackApi? api, { - BinaryMessenger? binaryMessenger, - String messageChannelSuffix = '', - }) { - messageChannelSuffix = - messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + Future getTileOverlayTile(String tileOverlayId, PlatformPoint location, int zoom); + + static void setUp(MapsCallbackApi? api, {BinaryMessenger? binaryMessenger, String messageChannelSuffix = '',}) { + messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraMoveStarted$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraMoveStarted$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); @@ -2370,29 +2327,24 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraMove$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraMove$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraMove was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraMove was null.'); final List args = (message as List?)!; - final PlatformCameraPosition? arg_cameraPosition = - (args[0] as PlatformCameraPosition?); + final PlatformCameraPosition? arg_cameraPosition = (args[0] as PlatformCameraPosition?); assert(arg_cameraPosition != null, 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraMove was null, expected non-null PlatformCameraPosition.'); try { @@ -2400,19 +2352,15 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraIdle$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraIdle$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); @@ -2423,26 +2371,22 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onTap$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onTap$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onTap was null.'); final List args = (message as List?)!; final PlatformLatLng? arg_position = (args[0] as PlatformLatLng?); assert(arg_position != null, @@ -2452,26 +2396,22 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onLongPress$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onLongPress$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onLongPress was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onLongPress was null.'); final List args = (message as List?)!; final PlatformLatLng? arg_position = (args[0] as PlatformLatLng?); assert(arg_position != null, @@ -2481,26 +2421,22 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerTap$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerTap$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerTap was null.'); final List args = (message as List?)!; final String? arg_markerId = (args[0] as String?); assert(arg_markerId != null, @@ -2510,26 +2446,22 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDragStart$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDragStart$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDragStart was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDragStart was null.'); final List args = (message as List?)!; final String? arg_markerId = (args[0] as String?); assert(arg_markerId != null, @@ -2542,26 +2474,22 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDrag$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDrag$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDrag was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDrag was null.'); final List args = (message as List?)!; final String? arg_markerId = (args[0] as String?); assert(arg_markerId != null, @@ -2574,26 +2502,22 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDragEnd$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDragEnd$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDragEnd was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDragEnd was null.'); final List args = (message as List?)!; final String? arg_markerId = (args[0] as String?); assert(arg_markerId != null, @@ -2606,26 +2530,22 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onInfoWindowTap$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onInfoWindowTap$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onInfoWindowTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onInfoWindowTap was null.'); final List args = (message as List?)!; final String? arg_markerId = (args[0] as String?); assert(arg_markerId != null, @@ -2635,26 +2555,22 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCircleTap$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCircleTap$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCircleTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCircleTap was null.'); final List args = (message as List?)!; final String? arg_circleId = (args[0] as String?); assert(arg_circleId != null, @@ -2664,26 +2580,22 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onClusterTap$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onClusterTap$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onClusterTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onClusterTap was null.'); final List args = (message as List?)!; final PlatformCluster? arg_cluster = (args[0] as PlatformCluster?); assert(arg_cluster != null, @@ -2693,26 +2605,22 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onPolygonTap$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onPolygonTap$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onPolygonTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onPolygonTap was null.'); final List args = (message as List?)!; final String? arg_polygonId = (args[0] as String?); assert(arg_polygonId != null, @@ -2722,26 +2630,22 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onPolylineTap$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onPolylineTap$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onPolylineTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onPolylineTap was null.'); final List args = (message as List?)!; final String? arg_polylineId = (args[0] as String?); assert(arg_polylineId != null, @@ -2751,26 +2655,22 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.getTileOverlayTile$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.getTileOverlayTile$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.getTileOverlayTile was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.getTileOverlayTile was null.'); final List args = (message as List?)!; final String? arg_tileOverlayId = (args[0] as String?); assert(arg_tileOverlayId != null, @@ -2782,14 +2682,12 @@ abstract class MapsCallbackApi { assert(arg_zoom != null, 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.getTileOverlayTile was null, expected non-null int.'); try { - final PlatformTile output = await api.getTileOverlayTile( - arg_tileOverlayId!, arg_location!, arg_zoom!); + final PlatformTile output = await api.getTileOverlayTile(arg_tileOverlayId!, arg_location!, arg_zoom!); return wrapResponse(result: output); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } @@ -2804,11 +2702,9 @@ class MapsPlatformViewApi { /// Constructor for [MapsPlatformViewApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - MapsPlatformViewApi( - {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + MapsPlatformViewApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) : pigeonVar_binaryMessenger = binaryMessenger, - pigeonVar_messageChannelSuffix = - messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; final BinaryMessenger? pigeonVar_binaryMessenger; static const MessageCodec pigeonChannelCodec = _PigeonCodec(); @@ -2816,10 +2712,8 @@ class MapsPlatformViewApi { final String pigeonVar_messageChannelSuffix; Future createView(PlatformMapViewCreationParams? type) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsPlatformViewApi.createView$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsPlatformViewApi.createView$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2845,11 +2739,9 @@ class MapsInspectorApi { /// Constructor for [MapsInspectorApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - MapsInspectorApi( - {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + MapsInspectorApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) : pigeonVar_binaryMessenger = binaryMessenger, - pigeonVar_messageChannelSuffix = - messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; final BinaryMessenger? pigeonVar_binaryMessenger; static const MessageCodec pigeonChannelCodec = _PigeonCodec(); @@ -2857,10 +2749,8 @@ class MapsInspectorApi { final String pigeonVar_messageChannelSuffix; Future areBuildingsEnabled() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areBuildingsEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areBuildingsEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2886,10 +2776,8 @@ class MapsInspectorApi { } Future areRotateGesturesEnabled() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areRotateGesturesEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areRotateGesturesEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2915,10 +2803,8 @@ class MapsInspectorApi { } Future areScrollGesturesEnabled() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areScrollGesturesEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areScrollGesturesEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2944,10 +2830,8 @@ class MapsInspectorApi { } Future areTiltGesturesEnabled() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areTiltGesturesEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areTiltGesturesEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2973,10 +2857,8 @@ class MapsInspectorApi { } Future areZoomGesturesEnabled() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areZoomGesturesEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areZoomGesturesEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3002,10 +2884,8 @@ class MapsInspectorApi { } Future isCompassEnabled() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.isCompassEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.isCompassEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3031,10 +2911,8 @@ class MapsInspectorApi { } Future isMyLocationButtonEnabled() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.isMyLocationButtonEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.isMyLocationButtonEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3060,10 +2938,8 @@ class MapsInspectorApi { } Future isTrafficEnabled() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.isTrafficEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.isTrafficEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3089,16 +2965,14 @@ class MapsInspectorApi { } Future getTileOverlayInfo(String tileOverlayId) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.getTileOverlayInfo$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.getTileOverlayInfo$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([tileOverlayId]) as List?; + final List? pigeonVar_replyList = + await pigeonVar_channel.send([tileOverlayId]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -3113,10 +2987,8 @@ class MapsInspectorApi { } Future getHeatmapInfo(String heatmapId) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.getHeatmapInfo$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.getHeatmapInfo$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3137,10 +3009,8 @@ class MapsInspectorApi { } Future getZoomRange() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.getZoomRange$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.getZoomRange$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3166,16 +3036,14 @@ class MapsInspectorApi { } Future> getClusters(String clusterManagerId) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.getClusters$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.getClusters$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([clusterManagerId]) as List?; + final List? pigeonVar_replyList = + await pigeonVar_channel.send([clusterManagerId]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -3190,8 +3058,91 @@ class MapsInspectorApi { message: 'Host platform returned null value for non-null return value.', ); } else { - return (pigeonVar_replyList[0] as List?)! - .cast(); + return (pigeonVar_replyList[0] as List?)!.cast(); + } + } +} + +/// API for interacting with the image registry. +class ImageRegistryApi { + /// Constructor for [ImageRegistryApi]. The [binaryMessenger] named argument is + /// available for dependency injection. If it is left null, the default + /// BinaryMessenger will be used which routes to the host platform. + ImageRegistryApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + : pigeonVar_binaryMessenger = binaryMessenger, + pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + final BinaryMessenger? pigeonVar_binaryMessenger; + + static const MessageCodec pigeonChannelCodec = _PigeonCodec(); + + final String pigeonVar_messageChannelSuffix; + + /// Adds a bitmap to the cache. + Future addBitmapToCache(int id, PlatformBitmap bitmap) async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.ImageRegistryApi.addBitmapToCache$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([id, bitmap]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Retrieves a bitmap from the cache. + Future removeBitmapFromCache(int id) async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.ImageRegistryApi.removeBitmapFromCache$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([id]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Clears the bitmap cache. + Future clearBitmapCache() async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.ImageRegistryApi.clearBitmapCache$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send(null) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; } } } diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/pigeons/messages.dart b/packages/google_maps_flutter/google_maps_flutter_ios/pigeons/messages.dart index 342bd9ea801..9d1a3c9742d 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/pigeons/messages.dart +++ b/packages/google_maps_flutter/google_maps_flutter_ios/pigeons/messages.dart @@ -540,6 +540,15 @@ class PlatformBitmapBytesMap { final double? height; } +/// Pigeon equivalent of a registered bitmap. +class PlatformBitmapRegisteredMapBitmap { + PlatformBitmapRegisteredMapBitmap({ + required this.id, + }); + + final int id; +} + /// Pigeon equivalent of [MapBitmapScaling]. enum PlatformMapBitmapScaling { auto, @@ -753,3 +762,16 @@ abstract class MapsInspectorApi { @ObjCSelector('clustersWithIdentifier:') List getClusters(String clusterManagerId); } + +/// API for interacting with the image registry. +@HostApi() +abstract class ImageRegistryApi { + /// Adds a bitmap to the cache. + void addBitmapToCache(int id, PlatformBitmap bitmap); + + /// Retrieves a bitmap from the cache. + void removeBitmapFromCache(int id); + + /// Clears the bitmap cache. + void clearBitmapCache(); +} diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_ios/pubspec.yaml index 2020ec8940e..385d5e8bd56 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_ios/pubspec.yaml @@ -35,3 +35,8 @@ topics: - google-maps - google-maps-flutter - map + +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + {google_maps_flutter_platform_interface: {path: ../../../packages/google_maps_flutter/google_maps_flutter_platform_interface}} diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart index a8f8e6d8b32..402e564035b 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart @@ -400,6 +400,23 @@ abstract class GoogleMapsFlutterPlatform extends PlatformInterface { return null; } + /// Registers [bitmap] with the bitmap registry. + Future registerBitmap(int id, MapBitmap bitmap) { + throw UnimplementedError('addBitmapToCache() has not been implemented.'); + } + + /// Unregisters the bitmap with the given [id]. + Future unregisterBitmap(int id) { + throw UnimplementedError( + 'removeBitmapFromCache() has not been implemented.', + ); + } + + /// Clears the bitmap cache. + Future clearBitmapCache() { + throw UnimplementedError('clearBitmapCache() has not been implemented.'); + } + /// Returns a widget displaying the map view. @Deprecated('Use buildViewWithConfiguration instead.') Widget buildView( diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/bitmap.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/bitmap.dart index e25d3c7a2c5..c7d01607d23 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/bitmap.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/bitmap.dart @@ -496,6 +496,26 @@ abstract class MapBitmap extends BitmapDescriptor { final double? height; } +/// Represents a [BitmapDescriptor] that was previously registered with the +/// bitmap registry. +class RegisteredMapBitmap extends BitmapDescriptor { + /// Creates a [RegisteredMapBitmap] with the given [id]. + const RegisteredMapBitmap({ + required this.id, + }) : super._(); + + /// The id of the registered bitmap. + final int id; + + @override + Object toJson() { + return [ + 'registered', + id, + ]; + } +} + /// Represents a [BitmapDescriptor] that is created from an asset image. /// /// This class extends [BitmapDescriptor] to support loading images from assets diff --git a/packages/google_maps_flutter/google_maps_flutter_web/example/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_web/example/pubspec.yaml index e4c0cfabb96..1b3d48b3a9c 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/example/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_web/example/pubspec.yaml @@ -28,9 +28,17 @@ flutter: assets: - assets/ + +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins dependency_overrides: + # Override the google_maps_flutter dependency on google_maps_flutter_web. # TODO(ditman): Unwind the circular dependency. This will create problems # if we need to make a breaking change to google_maps_flutter_web. google_maps_flutter_web: path: ../ + google_maps_flutter: + path: ../../../../packages/google_maps_flutter/google_maps_flutter + google_maps_flutter_platform_interface: + path: ../../../../packages/google_maps_flutter/google_maps_flutter_platform_interface diff --git a/packages/google_maps_flutter/google_maps_flutter_web/lib/google_maps_flutter_web.dart b/packages/google_maps_flutter/google_maps_flutter_web/lib/google_maps_flutter_web.dart index f56e0b02bd1..4d49dd1bf08 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/lib/google_maps_flutter_web.dart +++ b/packages/google_maps_flutter/google_maps_flutter_web/lib/google_maps_flutter_web.dart @@ -24,6 +24,7 @@ import 'package:web/web.dart'; import 'src/dom_window_extension.dart'; import 'src/google_maps_inspector_web.dart'; +import 'src/image_registry.dart'; import 'src/map_styler.dart'; import 'src/marker_clustering.dart'; import 'src/third_party/to_screen_location/to_screen_location.dart'; diff --git a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/convert.dart b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/convert.dart index f6af32046cc..e2d405b0455 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/convert.dart +++ b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/convert.dart @@ -369,8 +369,8 @@ void _cleanUpBitmapConversionCaches() { _bitmapBlobUrlCache.clear(); } -// Converts a [BitmapDescriptor] into a [gmaps.Icon] that can be used in Markers. -Future _gmIconFromBitmapDescriptor( +/// Converts a [BitmapDescriptor] into a [gmaps.Icon] that can be used in Markers. +Future gmIconFromBitmapDescriptor( BitmapDescriptor bitmapDescriptor) async { gmaps.Icon? icon; @@ -401,6 +401,12 @@ Future _gmIconFromBitmapDescriptor( return icon; } + if (bitmapDescriptor is RegisteredMapBitmap) { + final gmaps.Icon? registeredIcon = + ImageRegistry.instance.getBitmap(bitmapDescriptor.id); + return registeredIcon; + } + // The following code is for the deprecated BitmapDescriptor.fromBytes // and BitmapDescriptor.fromAssetImage. final List iconConfig = bitmapDescriptor.toJson() as List; @@ -441,6 +447,7 @@ Future _gmIconFromBitmapDescriptor( ..scaledSize = size; } } + return icon; } @@ -460,7 +467,7 @@ Future _markerOptionsFromMarker( ..visible = marker.visible ..opacity = marker.alpha ..draggable = marker.draggable - ..icon = await _gmIconFromBitmapDescriptor(marker.icon); + ..icon = await gmIconFromBitmapDescriptor(marker.icon); // TODO(ditman): Compute anchor properly, otherwise infowindows attach to the wrong spot. // Flat and Rotation are not supported directly on the web. } diff --git a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/google_maps_flutter_web.dart b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/google_maps_flutter_web.dart index c49b5ed6739..f39d7a8e3b8 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/google_maps_flutter_web.dart +++ b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/google_maps_flutter_web.dart @@ -306,6 +306,21 @@ class GoogleMapsPlugin extends GoogleMapsFlutterPlatform { return _map(mapId).lastStyleError; } + @override + Future registerBitmap(int id, MapBitmap bitmap) async { + return ImageRegistry.instance.addBitmapToCache(id, bitmap); + } + + @override + Future unregisterBitmap(int id) async { + return ImageRegistry.instance.removeBitmapFromCache(id); + } + + @override + Future clearBitmapCache() async { + return ImageRegistry.instance.clearBitmapCache(); + } + /// Disposes of the current map. It can't be used afterwards! @override void dispose({required int mapId}) { diff --git a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/image_registry.dart b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/image_registry.dart new file mode 100644 index 00000000000..17d5a116900 --- /dev/null +++ b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/image_registry.dart @@ -0,0 +1,39 @@ +import 'package:google_maps/google_maps.dart' as gmaps; +import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; + +import '../google_maps_flutter_web.dart'; + +/// Manages mapping between registered bitmap Ids and [gmaps.Icon] objects. +class ImageRegistry { + /// Default constructor. + ImageRegistry._(); + + /// The singleton instance of [ImageRegistry]. + static final ImageRegistry instance = ImageRegistry._(); + + final Map _registry = {}; + + /// Registers a [bitmap] with the given [id]. + Future addBitmapToCache(int id, MapBitmap bitmap) async { + final gmaps.Icon? convertedBitmap = + await gmIconFromBitmapDescriptor(bitmap); + if (convertedBitmap != null) { + _registry[id] = convertedBitmap; + } + } + + /// Unregisters a bitmap with the given [id]. + void removeBitmapFromCache(int id) { + _registry.remove(id); + } + + /// Unregisters all previously registered bitmaps and clears the cache. + void clearBitmapCache() { + _registry.clear(); + } + + /// Returns the [gmaps.Icon] object associated with the given [id]. + gmaps.Icon? getBitmap(int id) { + return _registry[id]; + } +} diff --git a/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml index 7ed3d99fed5..00f80d55e0c 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml @@ -40,3 +40,8 @@ topics: # The example deliberately includes limited-use secrets. false_secrets: - /example/web/index.html + +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + {google_maps_flutter_platform_interface: {path: ../../../packages/google_maps_flutter/google_maps_flutter_platform_interface}} From bdd65ab2d3cb09bb7ddd6b90fd62c9eef3fd4504 Mon Sep 17 00:00:00 2001 From: Alexander Troshkov <20989940+aednlaxer@users.noreply.github.com> Date: Fri, 31 Jan 2025 12:44:24 +0200 Subject: [PATCH 02/18] Update example code --- .../example/assets/checkers.png | Bin 0 -> 331719 bytes .../example/assets/red_rectangle.png | Bin 85 -> 0 bytes .../example/lib/bitmap_registry.dart | 143 ++++++++++-------- .../lib/src/bitmap_registry.dart | 21 ++- .../example/assets/checkers.png | Bin 0 -> 331719 bytes .../example/lib/bitmap_registry.dart | 136 +++++++++++++++++ .../example/lib/main.dart | 2 + .../example/ios14/assets/checkers.png | Bin 0 -> 331719 bytes .../example/ios14/lib/main.dart | 2 + .../example/ios15/assets/checkers.png | Bin 0 -> 331719 bytes .../example/ios15/lib/main.dart | 2 + .../lib/bitmap_registry.dart | 136 +++++++++++++++++ .../ios/Classes/GoogleMapMarkerController.h | 2 +- .../ios/Classes/GoogleMapMarkerController.m | 10 +- 14 files changed, 376 insertions(+), 78 deletions(-) create mode 100644 packages/google_maps_flutter/google_maps_flutter/example/assets/checkers.png delete mode 100644 packages/google_maps_flutter/google_maps_flutter/example/assets/red_rectangle.png create mode 100644 packages/google_maps_flutter/google_maps_flutter_android/example/assets/checkers.png create mode 100644 packages/google_maps_flutter/google_maps_flutter_android/example/lib/bitmap_registry.dart create mode 100644 packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/assets/checkers.png create mode 100644 packages/google_maps_flutter/google_maps_flutter_ios/example/ios15/assets/checkers.png create mode 100644 packages/google_maps_flutter/google_maps_flutter_ios/example/shared/maps_example_dart/lib/bitmap_registry.dart diff --git a/packages/google_maps_flutter/google_maps_flutter/example/assets/checkers.png b/packages/google_maps_flutter/google_maps_flutter/example/assets/checkers.png new file mode 100644 index 0000000000000000000000000000000000000000..444874d2279ee0368026350c0a99c33953a9c59a GIT binary patch literal 331719 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

cc52UjDuO=)GMqaJt9qC%arM zFE*TdHG#E8=cbR#y+i{S{r8K`E#t0++x~W$@QIuGghl%Pa#4yQY-kklNK|ri$XWEh zed3ik2wt$SK&1G$9lP$Qn#$yfr7@x88J@tIKxT4{9%0Oh?Tzh5|2^qEpG4?RJZRp7 ziR{O_iGhCB-+&Y4U6%bMLnWi@HGDs<_sza`pxf_V_0{)$$6;siM)QXATAj_DNRWJ_ zJ71gmpY^}(E2->B0|E$}w}7*eW~cOSMz{nbuEžIq}yhWe=r=q3!6Jn0Y*f}|M z>7$%Xb$6C=r$O8x(?e!XY# z9(RVFrmhuolmO!JVqkaI`!M&id1_-9y*y?=U-f3MBX;ve?pG&wy>}w)=WA{+dQ|eJ zh)VEg?!;NV5aQd($?0=feJ=|JNx|`)OcG{QpppjXh~5%BRyAuJR|%(l!|0nrgda@k^_pN}tl6 z<&ea4$~f>^Ab^Ns1lHPzj~lpZM9fym%_cTRRqAroaW6q$Ijl+ltvuROZ77QjDUaUs z=N*IiK`ytV^PyfW!K>Xd9{T%DuoFyO?yXpCtlL}A!g_Y#^@MWbd`u0WU%bvOEpB5~ z#mOl9@;kSW5dn0)1(2$&QajR-%|Zt`oCV|=!3zLY@(Ty`)cxX_LW@sq-K-v`d2IcBz$TJYNhhBnvNX3Y)t+5KzFLs!Ruf=mJus{1M#fLC=SLd5 zN}_r+>_jXk#oIGig93mc+M0W_+UZ-+@=nbroX`l3; zu0na$dBL$7^Q{5Za=Kr@1|7+O8qX80jhr-)v~dt0$-kek9}WF4%bP=C9YC6xS^3Cj zG?`URtlf@gX=$Ia6Egb#*^u^Kx3ImgI~LMeg)LtE@Jb@3e7QmaiL8-4+A_Y<-DXzI z%Fl>H2}}L|&fUG7*T|q@H@$-=fp|^t2J%Yn*&dt8V`vsN_UgrL?=NORU~OT5z})QgY$+kv4XynGqJg<#qDv<~#jw~X~`{$FhB&*ylSNSAeBgJIb5 zy5;3L5HEhaYj6cqCjLMBJg!FCeJ`dTR_6M%K08kT;+e?NQC0@->-wJq%|MGs96kSr zj=Q;zjy~5mZt(fxs{U0eR4Xzd`$WEX;*5mGr%6@CU6fbco7(Q^k&gWhW8L)s*585H z$9=WyZ^4zd9guXU!%TYv2@-+2M3O}w&tW9gXLiFIdH4{CxWg#ugasnskI=9{ZK7GEmd+X~al+8Bmv{l<~GH9_>f8qI}I5qCRP{_svU)&Qs@?o+Q zkV5C7);BtzKSux^$1B_{X1(jo))gLU2S6E|&_S&`6`6rDm$`QBN9Kmxc7QDx|y9@Isc39Ot*sf3mjHOpPBN-CJoRMLGwQ(!ln}>SSyUp^(5oO zU6^EiZLEKvrzrNEV~mnb(Kh&sF-Fk!L|Bh+2=>I!0UX;<`?ztus(N~YFraJMHbF*~ zZgIGn{LbMV0Ol*e$gyGNclZ8Mc5<%w_BZVABYc)k+UfDnPWpe=q52=}!QaN)=oYT9 zkmnUr2BQVhSz>(#uC3h`A5eY>bj1P(z;VQ;z58TKC0H2ZWR-Yz-}=_56E2qeAeD@B z=_Sk4TNF{%VLT#(nM!Gugj=}^j%%;~ZLIJ`8+$Z2{=?FrZ0{{-nf=Zi%_jdB-C6a+ zwgJ*xe@gQ&LD1=5O8^<(f>ozAD6mOH6Q57XhjLwIJ~s-Yj6t2(>)>QQvsmKQ0vnfI z48*>0Pl%dZ?kLYoLfIlZwEyxH-cNTi)v3Lz`vl>C; znCA@WeA;QUjZv_(@toW4ih`aK-5sr&W{b)%N_qoHx1!);T-bb_c!Kj-;+6{_`-qQz zfo%nti|lFL_UY2R(Wd-F9y%De84b=u@}AoT)U{O^?y~Qj@pl8;Q2UTTMVZqs?M^>+o?Z2*@&s`EJ3# zX-)(4nffowAo~C1=K%fPHovgEX?rSv0y}1Q0&BIyw!1$WqDjYfoICx0+UVylfogYO zrT}rdS2(9^_waYM&c^X^$HR^k*=OZ#Rkhby^4HduGa{fqxAc)? zK$Gx3nnAmcSJy;G~*CJS=F+zwmFecFB7MJs$8y1CSkz8z-rzVSC>;@~~TP zm#Nf+kva@aeB04dO8yVLxrWix^@F~>VY8jBpWE(lUT#h8zNTi+;=|~}ph0{Vpl3!$ zV;$tolHQz;1~XQ&nufO-h{u7LQ1?0_=5(N($J(|ep7SN&kdEeg=0cgmz*-R0%T;s-Sz{O|RTC2&tult_#}o9XPZjxQfZY z&U0`qJ6UeD7iWGn_LNaFznq?{*Fg8WM_r}bBdC;U=YA7 zgQi8Is0W#-5gQ?5s;rA_=D(q@&^cUn&PfZ_^ucq0L90ZAYo>ZIg0VR2%G{KK`~2bv zHWyuTpxv_nNk{v1={f=d%Xdy8uvKl+#xzei00Oz3>$kQSG;z{D|3mOG%j{dbd0f7! ze@mh*uYwM%foyHY^^0er~sWbbN!bwPPR^MWBLv`N~^vvHvF~Aw9O_tyh>*1 z-}D(G*7=G$0-OzF2x+DeQkVrvJ^Z>Tsu->De;F?ZH^$|Z^ongpx1~4Pon=6umARu+ z@^!HJt!uq*>f_t3u>J0a>Qx_5GO2PBMVtS2F5LG!I3MAf4K46_^e;EEZfE}7e&s(h z0Ku~d(UDTi)?@y>&{u80#gaK(ogkMV^OzBEWOdLt1#VVn8#7uSnKJCwO#O#~q0Ii( z*g$d4ob{3{Lf$pq8|ol9cHcN0PvDeul=ss?*Yhl{4rjt~7~8^N1Mr9XH$(sCApAox z)b82m{Q(TM>u&w~#aOh!N5xHuq;N4ONuX(lmpR%-4EaeOc-{FEP+IWTFv+J<$` znoP{)q;IEtw|2OG0&_ROKkgssMcjShLC*06-}atee28D~wA}(X@&BgB{tCFd^*~gT zI2`!51fG_g$T;jW!n$@$y{v~T4k zd#5DA%|BplyCE}KcJTu@eD$gSKpB4r#7&l*c&mudoi&O}b+R;~S8p`R);B{9Pcf9$ zx{)94L&oAdk%7$G)7@7ZZPe#Z*Jf+_WHg+8I)GXSU8EnHE$&2yW~DQBQB2=~sPSpB z(wSIuKN@@9^Y^x=`@g++6ZAiUweo)lM%J&V5zU}$H(&f`M@N^DfhA~Rkh^C}97O)W z`EZ{>UhPn0%f0OsdNVqK(5ieA0a=v3FvB(n=MYC)|LC$P`v1Cau?*e!wrm3`QWr5N zrutuh<#y43bXy+k&SRN}ciB`q8T_4y+ND1~Uh_ntT5f>tcJHRc>~GT-o#(~RU6Tk0 z{w-+RH21?f&c5@QQ927GYzo#4L^FPel^t9YJ3a-%lpcpdDOeio>9y;Ev77=fr^fSr^Tx|Yt`S>aE64AG|lQH&d8&?a{+r2ohxxDenJ~F5)XEJxx zk7;=BDCAE`>y(iNX-gyP^#-ifly->>1S}DJOUkibgdC$9+UIl*ooG53)&$SPy-@|* zb0!pAnV%$GFFV3mJ+oy>GIcLYqWJ?pj&CM6BTSoPm~tP#HMb=7(ex=?#Y02nQIr)CjB?i$f<;P!r6Sx z)9`)Bj@YT(e84C6+7AHz2KaCHNY@tm;Jp*gH(pQIw>kpAd}#0fxqi%ZoS!jcB*i5H zP@Vnxauj#j>9(?&200Zz`VqpREJIHVI$`*3@@z^18%P{!F<5a44AS;bYGmU7tO5Z* zxN(Z509n`n7~=}^Mt&-AV=&>qY$}AZK%D@-W2#=JaVl;{P`|VHO$S^%CqTUh3OD`u z$fj@FTz!)LQUC3Ce&@|6{S-U{0xj_bTy8k#A!#iE&+a%{$$ek)wU>EY+ zhhRl-p`Vt~tMi&`y6yXWoQdZ`BajdUvX#0H>6zTB3LAip@KThu$(J<(7;ZuNFqap81JcZCI?IjSokFOCuYkgZ3?jE335 z2r>%f2haIt9Vf8mCCW}^SuJ%B*QK82iILgCpl;(=w)(RjbSK?TkbB`W)BgmJ@w4j@%nncbVO0uno(uY~mFu!}GR)bS_A7*5_I>E< zbD#q!b!uB+9Uo^0aw@kh*_(qo5ZpRj{iL9IHn563OBg2Gjw4Qy7BU#z&WV|%TE`d_ zP{lm%*p9&=3Ss?~ptRw3GDzaCz(?wTgOj5F#dnRvME|qWGc(`R{Sk+#{?GgkyEE&5 z6z`M%AA^jG2>sUQG~jiqv%g`#<^?M1n3YYNRX#gCpVrh)^JJyR@r%9=^WiSG#jUT^ zri>ud((Yk*EA26Y6X;7SM@)S9l$4TT3@(QBRG^<7Hs9i|39m%_fmc97bS>927p9DG zDoXHsdJ3q&F?e35z)f~cBK@yrQp$5k<93PCGNHccds(VYnej44^~}fO7#6@})4G>_L?RO20kJen5wf$P0F&zwVw1;&i4)|u zIGmhd@5twPl1o9WEPO$`bIj%GC6S>Jw0*R+cP}Fwt#-N-2i#tmBoq>fHOR`%M zx@(F<0Xb)wNNJOL8O^_(fVtV;p3ilDQ+^ZB?EK0O=iiw*st_@ToWCXF_5RQHuau3X}Atn9yigN$JT!Ce2E{BAe~(nT8NKui41iq z4eQy#&d$EYxh7_Qwz1%jKN(!37Zu$d{oI#-*{)o7DZJBJZ~Mag+-`2G-#bSd zAreT9>+U}FK?#b5a9Cw^1zUI;&IkMbfdQ8XyT^H z4H;W(Cdm7AFx%$r!@6>Jhu8aXlW0h2M#PkMuv?H+KuOq(jj@?{p9I~m-{*FpfSURG z&e*?#yl-(7c5(!rUJ0D->&Mv%&);wL*th386_5(N!Ra5t2mF5yryunT?tqAWrI5A< z4YxKFfwcLAp{DVAKe95@ddfc>SC=6Z10Ik~%a~b@Jw-iuKh2Z3z?tSqcXp%=vuUQj zNeyv2*>tR)nZOvI8y(T0szx=Y4|Gq!3)#b8xTtGsfOonMUS~P~L@xag0YCM4c1E_^ z1nuLb{}-EpW4JzkPC!b5Mp|s7KWT?u7R>}S<>I*R_POcX(C z6E2n^c$PE z1PeF0+{p5+&2MaW-TStUYiWIMd1Igl8zD69rTAG_Ze=?T0S`YXKCpYyc$;inp(d^< z{u{(KQE${FW)c$6O9U_+8cw%}tXtuqMyK#vlgA;WW{TfD;kItOv_KXQnI>hLn^U4!)_Z&JB)1t9HV+?_FFci!DL>rvW1C%47}x#M z=~gy3jbzT{3!%)$uf_TTq#=LwD+SsGECfHUz73}P9)E7&j#lgtrU zIZ}j-nE=j+dJacDWD^2^?KagDJ2Azc!D(QH(=hNaHUdzomzZu8bnP_10m+~5f*xKJybQQFX1Drs8C*?AA{PvoWV8yAljM#?v zBfv@~9?%ogZwCw}I-A$z$WZ+U;0klor6vJcbTD4>o%$kjjY+o_Xal^Af3(GLTwlnX z$lO86I6SjaP zbkEPbV)+Ttu)@2nZ?FAQwQh3x&n_uPr8nOBIN64#$5Sa879izBS41vRk|TN(Zhdzg z+isb>0!V29T#h@6x`Ca(?vz6-GDD!R( zo#JQ=yk&-)neNp81aifL4&aY6^(K=i-H9l>wY&EQOwRqye=T6u{}V4pTM9Gm$2N@@ z>1PIBH~rrxI?{v={p)qYJ^=v3prtH}HxV_9eli2{>Kb}LMG?ac*%~(dX%a$5cloyR z9+XE^!dN9)T^t%fmok}`I4}kpMxDIrChO)~{a$4~Nn@-5J8-SdmEzE}VV1NaoZ zSTd4?V$>83FhX#FPEvv@Sm9BtT#NUB#kS+i1rL{ZLnot-h~N8e4T=72i)I~0*$U1; z$9mw`*_%LR_uj<1&kE#&ujVb^;e0mA`+Pws zCXUK1nAHGgK$*WW&UDsY-zqT%nfaoAKi{Y0Tn@jTKydPJvTmz=qpkddiAFLT$=Sp)>wwj<_{A)x9fgy*gQ?;1Ubys)pc)g zne&M+Z**fYf_jd07QJa_y!@f?gu)iO>Dw=yi|0@6-gke`LcLFMwTxbD(yT>A*G>~)m9vd~$ zcIrF~J0jUQq&=Mq>ZhZdwY3GoBf1jTpjI_S&|NApV5mxPSdk87g$x|*qto&Io#ayg zYi7n7`(y)-M!b;F>a%52KfB`W=&n~=nSRl^Pwvg%Px84l+8>u+$ofb6e`6!@hov2z zX<*lGTu8f{itX~uN32Iss6GTSArApYEQ_vbR|J@8kCRpU7}Fh=bwmJ&)L-qxYt1(L zpPE7o>8H#heUzE2XVpQ5+zP9tVAAW9i@!kK8+lO|W zYdNHr`)|x`)w-GKQcL;tM>jjAdmUw+M>j)1RF81$ZBx zC%R*yURLlC%Mlm(H9M z@NqsFG}z8KJ;(o4WHQs0J4BE~IwPBs0R&^zy`oh*K!YTJrDU?m$(VE}W$5bAe|PGC zu+ON6gU32`<#TLurld2(7=B^!Ids8cGMH_yb?};lW4W!VHugA$_~_*`^L zatMbU_pT^2Mx$-22js*w%wzYcj5F-HnLQ)O^AR3_&$h8R|#n zmA6IzlaEZ=jf+1ob{VUPtXI%4OrvZ1-#+ARye3B-TM%cq#SCx0C1e`llvMf4ubmT2 zOP`x^!!BUp1p1HQf76Ege~|MxyYQQPgH~N10Z7)36o|~q=-?lNsu0=T7nd1)BgsRg z-g<+zso|wh34|phV}!GQ1p>VD5RlC9`XfEnOY)Ak)8IoKOsv-(#zJ2ISPJ7ja~lMS zP)#3>vA~jvBb-3A*Vd?vk==#eMb2(u;8PH@(ENjNoxsiw1pO2Wx#w_~3~cS?a?Z>y zjw-GSvTOGW()xD*iN=!XLJ1*42T|xD>HT5sx#&@=F{YpHzsg8^WpdNdsf?qu6f^_q z0(ett4`aaM1r{+**dHuWwetKUfrw##oCFuA>V+z}m)p%i$c3Vn>Sk0E)kgF`Ng&XQ z+Ndp3R#y&ds8zQ2t}<~FXD>(goAN5J|0)n@I<@`UZ~ODTz0o#J2FnpU1JmgAn1J!p zU4w0RGqLG`46V@w_}<28pj|M8Ix^3}I$r1hQpqAgJx2AgTgiaZfAxvjp;16@Y4Rd^ zeyIQ%$INT1{>x1;JSw`$<1=X@IHI{|AbkWVhjNpX8-P0L*_+-RMe^ozCV5SOJ^Guh z#wR*<3y_NbbaDDkEK`8DoSHTHbd~iqk-|0P($qhufVx1qtlW>%#*=aG*m-m>KQ%yQ zKn*SCeDwk1=oUB~G=~1`^zbuuM-;I&k2+e)Gxgt1=0w<t7EQz&;u3X!<`d)5)&w z?(4iP_sm*Qt>uPIc0upN;8s`tHE@r+KF({cbPxK$pk}8B?`mY$0%2=59DfPDF1dx; z`2oJI8OR)rBML9!YJJ%N=GC#7oeES^a2dS#_RT;c{aONj*UXk>@BmEUvReaoeqKYC zPOY}`^T-y*D$kG<;_T;u)6&B(@CcV%J=|+%i?f7sB4FwI!a225If0>@FuwtsHw8GA zlLHx9zH>i02dkl`koSKN&5Mw~jqk+cuFc+%4B484S?6;VCN3s~@$n_D+#7>len&<& zzEii5F%9KCOoCn#a|-p3tOq0Hp%B&r2NHkbg1UgB}>rP8!E)=*JA4cM*q-{Fa8cqM;vsjZXfi@&cW^c+4=BeU#Ie>-_1$n z>An})Qnw~p({>1bR5?#Ke18P zzm%)&Zfl>h79P-3}nJL13X;V~{dw1Vv_(PoX}mh(YFu970(f7*XxJ z<6qL&jD$nTo%0iz7qbR*1z-7ozV{{eawLvOj2HS^sN68wt}H%b?tkxIN$o}&LjR3x|fqMXo+MUd8ElUjCNh^1Mmadzb}f@khUPNN0ZpWJw`mV~<|L%!8Y$O}VLo^nX z2QK+Esp&ZQ3yyaLY!0)5zS=u7*7>~3v14ab?9SvFf162q>wjnHZ-t=jpP=K{#K1)J z6j&Wq-}k(P?tGpt+$L3{O?JFUgjcQf3C}Z`f+fgvq)%Xf^88dV8Yw$9 z4Z%Vs(q}LeNy9TM+}lU-ke@jq`jG-@bY$c~lYPc}UwJUVjsLRW)i0;XeMw*)%SH#p zR-EN;b6NesQNB)Wtn0D?X1-kC((Lp06xD&NoSV_te^PeAhV}`$X23jrzaQz0l#e&8 zkv>7_Qh8vD-P>vL(H4Cs@EE2hPn(#`Iq*#LjbBJcVNcyeW8v1#a`%CBvT62s&tZ(UV=(h4f+8=6>MD?bJDIF8OYhLV68tb3i#ct zFYu`UcICHv+Hd=j9`W0T=B*toy%g?%xa@Q&;D=GI=zIoR)l-6Scm`q!%ElmGjlTNM zLn>RS-4Jj$nS3a+>EN@g>DiR8uaGvTk#h||wl|~y;VUaANkC@Jtr!(sgupBCNf4%h zG;%HzCQ3$H$J0K4Q+5KW*WMh#`R4xe$+*{ii#5vn8imKEi+_z$-FR#uS$Np@1=;_{ z+73CQ`7OYZKs--cIBjH;BVeG=ezR}M))2T6^lKZ}Y>pm1fezQ$LdN7FfnNnS=-+Zj z#cHmv2W1ub?MrP*X4X8BWOdeoXQ$JRw3gWr`i6rONZQfc z(@lEfJZ}8#9MYfla4s#TdI`XcBR=|4RpDW)&i^m(4i%cwBuH`FBEeK1K-av z;L4UE8i0Ndc`Z6Bur4~JwkK;eNl841peQ7vQ~>Bv&q_cI`=0j!AfkX~`q0TKDE!getxARbK8sV|K?uF z+uj}#tC;C4WaYyOlb8Tk=t}f}SjORk-6^NZfWas`JW~4QDFI-Hle$rlQE7lvNkgYM zavYYIV8JqRkUAv0?KKvcOXb=^K#?gfb8Ei(+kr=UyKo#a-aJ>4SSzs|`r!RHoB^AV zTFo{Wo4Az|v^nYHsjT+uvvSk#H(zk=&(FFu`#AUgcNEzH(MnE`GBMr5_RY8|(XD51 zr$gls7iytANLyej%zB0wZ3&{2W>9Cg51)%NRl6`cLO4G!2jMEkA#)Q1OJ?~%Q&vp_ z5L2eVmEk*GJfn-P*{{&<(g#3dS58LTeQ!8-eZC5FoRphrL>o47)d|06&kx z^QlcSMVslS2LCxF0fRjXjXVYRTx3nTUCZ$$8`jZ{LAEZaajoZ@PgF z&@_6FfQxq=S{gjYS7y_^&2~dq9$8+sdD^uqS}=iB0?qsCmC<3x6kl{K#%!%8id#-H*ffx!OFx zl#)$i(}KamxQG+xW(+EF*Fu8%M%89t5x8!eM3QmBA9SBIf|~AcvQhfNu`4%T4m5%X zZTHkFU^g@?Eqm${=oFs%|FQQryVCVcmQch|&zb=@KqDbW6zU$s5Q$L_;6j-&V89SD zgbU~f2_Y__F5m?3Nyl2TB5d!>^L$mJfZE^pKAE{~hr@RKtO$GWV^s1N=4;T<@b^r( ziCKhs-@u1t&b{luL2m2bTlsOtjO;maOI&qeCXpFT+w-p4pXgP2+`Y}yb+ZffEf4+u zK5*Xv2CuaPlKTFty3j}vM@Y6sJjJ@D4?S6V3)v0}E?9-ZhHM#*TfC}#Z96LJtSTr8 zd9aqpej%e7d^C{KdE|sFGCn~=%&o~B(wZdm*Bgs+NSFoD1~`I3f#N~{0wwUWCJKkF z(=m$182-T6pROA)X?32gZR@;vNaBUN8+z=z)2#9@72p#9H_Kpr-z#c;KuH2-$nlH^ zjBDW@;*QMqD$r`6!-z&AK@a$I8AIr2(pb6>eEtZWx{fa^S9Z+1OoCQm-(j&6ba0hz zg0rJuZ2E8ga>>Ri&|5U2tNFaL9xpI>U_)}m#}YhVQ+{rMdtP+zw#&>-Cf|Xfck-p> zH&A%x;h;Px-nISdI_bf&pH+L->njrV5FK_nZ1C<0lN;FaF7w03tia^2U-|Nb6wal0 z7;}Lo$`Hr5{`)4EKF*;RJ?pe==$+1rXP^#HRhu(bECuYk>~iSo5P*`O@~^Oi{u^9s z166C;+8l;LGcvg|{$O7tCWUR(zq@bmb-?T%B%MIbdmity{LaVSb}^1~mc9u8JF)_i zfd3yo*1wjE=ca+Lx1D59r!xYFwr31}%}jSr0&i+g%rWH4tat>!%V(^=KjVgAA>#vn z7yclB8Y)DAb^!-jR)4G+ziXtJj@5VJvajU>ps{QBGrN~vn=Ju`-B#REZQn1IJ9TpK z|2Mr_{db!lW5?|`*v!nH`LsLeKi2nqBKcikkay6TbkFpj$BVaMxhn|a@0R^BW-3#t z66^;+j}u=&#sUZ;kB2O@7TEF*3Qc_DLBgQ54F`%dK)X8En~DNQq>`dD7@9?b;G{Tq zTD=i;H86*uodp$@XQ^h$8mN#jF?N+aC(L#0Jf4-J1lq54atzn9b3=RV_cx#){ks|+ ztA&LiV{%PCpMxs9DvrI;>E9}Sjn8Vb9SGQ?vtM-~OEEI0(RWXT?VmN}8|J)iJ4jo1 zFMVr_>ci-;{LzAz)jsLqb)8JqM6r>_raF>0neh zjuvzSsMjmBTHJRT^!_PGJ+;}ciAx^pe*%Wy0>r5_w|d&o8~whu-*rFrP(VZjN!67e z0c`X#$yN6AVJxycu4F<0nk@w853^wlxKXTYr$GXtTRZ9x8FiKCW#g7VKoY^qR~F+$ zpS>^We}c{_gQk8XcL~*guulbF_EtY`*AqB-49*`qdUFrQ?Utmi=ql=5Bz`OU1W)x_tZKnm0 zoAL_o$}Dkgi~}G^@B%STg|s?r>_&r2u|?*E){ed{cDQ>ZJR&%%T%Tb*WB%Yq{Z z3q-k_fKN`-1e5@Oj$>XzbVIgk}BM&xU&*S0Ybyau76{5~1TWnhfEC8|3^rb64; zGRV$2`K3hDFV-3HwBQ-c7_A&pT??1%!=2Bz(4i$^+*gmm&n40>jwp9CLD#&yO<5yx zrIP>gju{|74rJ*(pqZ>IDtW$JaakcRNq&ZIZ2!hqUTv&Bx0_cScK$Z}@&@l*@tj?B>xot0 z{cUJ6xzP)aFONLv^`*=fm|Ea^R;F>)?3$H;EAURqmOVSQoq4`CK?=yDKV z{+TGjE7QD0Tnv`Hd9INehAg2QJj@akYe!=+HgOQ$^!^FhQl@So<8J|SkHE{$z~&wd z3|kzwwSDBpZu%dWHrAHO&7E@Rl=Dj3kbTk1WpO>jZ5+Q%DbbzjSK#s2?)Wz}unUYl zOLB6c-j2M$m%wFgz)5Ph-2|F>+|i)q8+tAKiPZn0kEM*gH`tM{KCwS#USl-@s%!@{ zn)#kO1Lk&L`*@Rq-R}Fn{Y{qnd0~Ub=nZdMJJVp>IRUqJZ~cHj_r>zaHW#39>p$jV zn`scCA_h9DE7-c;X4&;^CVA`>Y+HNLYmXIsVs_jAQRLS({yO`L9fq$$Yjsv@xd^+TN(o@LP7eo^}*1F3>V-Cg(8Iw#*)HkV^I30o(c}KjWg1|uaU~kt8M!OZw`y?1cS_Cjf_`p?kptY zfEv~V>2pCd^P2&bQL#-oUnI)~w&TIDy)(?GDps`7NIjRn=q%k_&S&AA^0EXD35Tp2`XjC^o1Wm)=A0Q{ zA-0(D@t*qyGJA-!0Uv8}7(f=PzAjz&_6)$V%*5^F3$Z7?PZ3>{hs2V?^$RLbL1jhCv6pW##Y z;wux2iPDrWTY>#~kg;av9A?ixTSKc}wzgXGn~Jn!`X z#3yZb1FT)Pciowmv(swrrEb24mjYHoxGio6!wc|K;IV|*MJjQ>pYwI=biX*L658f~ zt#&?+PP3etd2I)Bt6ti?RCm(Qs8IyESCWi&X1j`h>={|`vnFyGjD(ZvLDI=8bNI32<`K=oC{!Bp6!YtAw_Klh^JE zcOf_Yke#MWlg?5h(zc6VVqmb2;+ip0Wwq&GM&HNhHk|tC;8DyQN40E+rBX&QgYAn& zGXsp5f_+u~D+3pviE$p~O>OMYoh0=*uIoD+JImDn`$NMCT&hpo%>B*p>}~ylM?WEh zs~-c8*S_YLbX>#<_Fj)=?nNKizV5}qAP1UDoYZvF2gzvWc$D4}JGH|J`eOlq%AGL@ z!DMn~xbvu$ua-;yz3aa<^I)l~bXnwH-3)k=G2j7s8QV$}FMJ7FwPTosJk`QK zNgmZq=`pMaIRWT@z)Yt$cm4P*S+Mhb=J6CrsJ=bvfUew$-sAwEi~dgc#{XCKRv?Ni zt+YxoLc=D5)9xFZMf(qcw|trGPNy5l+H$xfop$G1eW|Iz+BJ4RK2j1{+n^0 zl1x?tZ9F`0GCj%v%c{5uSf#aLU<6rIXJKdII9!j0-p}>kfuvg>r*>}vKQ8E2mjv@N zvDbb(nRqPwlfYg00km0xdT6W=OjuD?W24c1y<#@QE*z>lcCteOlXs@sw)!~ifS3Sw zf|d~7(U~VqgJY|Wsf-lV<`xhWoes8UrZ06j{efg+Oxrr>CF7N$)6yT`s zKJaie=uf`t6HKG}e+o)Y?fhZfdzp_p{#^g-A@l{)%i4zE6&E8Md@iz&*TT!$aBI?-`NBlX8-Qd`KMx9~Q~G&rZZoo$eCYJ;#>$z{UTG>? zC9gK2%@vym)Cs;q<~YY#-wi&fbn}Tf+Chpc4Exy+g#W)zy0IgSZ<A*&hO-M~C&Sk9O~|48O>c zvt*l7um5z{@Ac1D`HEP-^QVh$)NVzSCFQ7(1-RxV(@?HTRwa+Rb71=*ulk>UhIBF$ zoPl>9YtA{$qaa-42mxsXbb)cM`Gl-k?Zy~DXQq=A^l8AvAi~eG{NxL68Cuf4+&g7i z*XOezduxABJRbBM0P7^nPvC0vHzK3NB5(Bnnb+O~2~mr)|4-zBHFta-?4=nJnAB1F z-I8and&xx_Wfp`XAbPcMPe~Nn4#P<)OpBVP83e#+dk_4+=ybA({+*|-uKV%<0_f`ogN^`{%O*>>HlM2alY+#(4Bp% zrmuY(`!wu8*nG8q{kAwJj>XDANuixCD9y=XN~iWopmMr?YcR;e>!+uor=x{Td9>#l z${@lxth<2^M@BNrT)Onj>==TW1T|{_&h;o48GPU`W6RqO&j!W3DPW0 zP4LJWTpIzBTKSBrbo;e-@Cgnf<8O|rd0C635rV&699Z#%UQGbaNtQM+EM=@sb#c4-#=x_nKQr8_+(nhB({C>&d`fruMJ`%|3wKT}J`^e{- zK*xZ~mm);ub4SoS-^VEChF_huFLPpXPERBz@f@VfWCV6kAm8cVZ0ewV0z?*aGir9O zx9pDNkti1xMKG3rKk`4(T{GK{>dfmVv$Vms+t_J)H+sI)*ZaS5OIP3`yx2oPFux-( ze&nA&tbdPZo%`f!x?J?qEIP4~FC*!RIruDUEMsgnnOy7Fk8i;+ioz_PQ*}KWAC=Q> zNIev%cuK2T=<~NCUlM#Q{r^t=uNm~db1`IOaU&k1^v1b6j`Lb;ItUM$aPv9OB5|ev zYksZO-((@gsXhe}4|e-@MVteLM)yK%epmbJb`OMZ*RmfM{kJ_3n*D8UVz=$8|1&8; zx_LkU5_2NKE!qfGJ2Md**?4Cq2@^eJ_Ucjy-HSLlr0cYBnV(|eDz$gPAu&Cxf!r9p z!w-b;^_oYFGqhv3KCCGZzX>e-0nofN=%?SuphIbX;y50p>k~ev?$3Hi6xj!QHNdoW z#u~D4%1;HrtnOCG#pQWGf){s{M-A{BlTI_;Z7_M`4x#C`bqsxYnB5@e^Gp_{w`GWI z#s`DfkhUdtAetrDs01w%0S;ub!fa0@SnB^b7$%S`9g2?(-A$fv_nB?9XZ<+sD(L-1 zXX?fS5K@q!ybOT!be)53+wL_W2eu%i58&|Thi5$nV$v=XoE9nw0OHXDakPUR(yjuR zx#48H({84)5tjhFWxXJV3&m5Vtk6#;60EJ5@a2^2NN>4do%gNs;2;w3l`bltiaP#y z)qi6GS9U|0#09;yLA+-jvzhSEaoFgl+weaD{7?Gv*q85ic?SD?fA&y_kBk1>MgOlf zGf8Fd?a8K#S@b2mMF%k{#7iMx0`VPqwPz6EK)POU2Ws(meXl+;kSJNs?MR_vvI9~g zO+KuscJLxnmVjkxcn?x~-I@?(7HYXN5l*m|^BA)&7=VHio3DuS3)%=p4Fb!|cEvtb z$LrA;jtj#24wQWayvhJpxjCJ|G4QdPl7(@e9p6m>-d=vc{|PueIgH}POCqevi5f+b zFQZX)YjFQ1M+iPv-Pm}M?0CU7JSXImf$?%Q_>a7)hBRJF46`%T!t#{0ZIZG)SY0{; zAk@!U$bjs?DZRl0{wd~pe%`Hg$=yo{(sOkVny%(Au#yQXbFw0ONH6CZs5E|~)Tkyq zr^>OzZ?9u%*a?yKc2oV&=d(_t`YB+(UH)LVKf7Z4j*Re`p<2D^c0K}EM;rgpObZ_Z z4^|Oyc+$tI{{pJPOHigV!Kr{~^wp1D<*5$fk_7#0H{fMCxziKn|1D#dMF3Vm+Rlan zo8-?WfB7~o-9=e)AJ}=zV211kX)P>=_Qo#M|H+Pr_!8DFo#FHHhxM>>d-Q0Wzqt!r z$Jo~TvF}=#v8K0R;BURSEAj-=<@yLGIse(|z>l1K(}P{O^`|c2*BA865P-O=Kw9CX z)SYbQ`Op-|_=sSsxF@5xgl|Q(`rJmq31~DMysuHXRkpzQz=9|~u=O`5h(OOKC@=Xn zauDUPsvUu!S*UPVycN0yZkDgJLm9FYoLG$8!NEb#o{Zrq0(30%9k8|U%EnkuE?io- z2s`)XE)#p^FV1#_bxscOy>dK6^AGoq&bBfiQ9!@ReYIcpF=Vn3;%Gb{w02~z22dpL zjD3Epf61mG>v!ENFeirlbqA=%f>h1mydXobk9@e?85759&-Kk9#WRoX*!6_&dNXn` z=WaR=NMZ=)qYqTQfKM#_clP)GYHR(6hVlk7ZUE&JeBgd-f9Y#g)`s>Oj~5+(bYlMC zs4nw$)YZzZ&~jqVm;eeHkDE$i+505ZJLG}$QV0jw7`uC^8#W?{Vv-I&68xOT}yW zUw_c4TL6CYub}G!NxKCQ{kaAo?dSM$fnGvyTURei*KuBNf2LQsPIJlEHhTlz6x8zn z_cd_p40gTLRxDXsfR=o?f_`JQ((&cKD`3dmX?ZK~0M=P_EpZuk$3;%3wc@-hPNOu0 zOIz?B!fuJVEgIXr@~9g6OVDVVMXO1mo>f5j^W}RaWRBN;X&&wQyE6Fyy=-q&LHnJL z8|Kln8BnRcp6wFQ9Q$hkr}6#9!}3D->5nm9%_ zV)R`Ft!4ing!XptN$^hBLVx~T|EhF8{=+Z_y+!m&YbwHTuAB3#zIUa@=Trjxj!Pi) z%0OB@>j8u8we>p@daumtDQ|(yaFGRR=))lfoa$*!P4jNqo4&(dRh0I zw$I~>i|;z7qCmZDZ_;$7xsTY={yXb3Y@3ui^@<@d@q=O1(%BY5xuPvxheWh=Lv9aT2uH_^p`rptgvYesUmuhWUg8@M{k zepLTAdLLa^y{%pJw5f(frr;F6Bq@N;Z3UuVsT|*~XkOaM04tf}jz8#^G<(}X5FE6# z<>x>v+U_{t4x%0m)K(Yj0Ik+Bze{4l5P(ttor!K4&eVUIUqN4%<~itNeAj-RWJfUiPFPhx&e}`KbSI#6egX{g|r(r6tavu|t^5%QX~ z+UD~#nhY|G#u&#@GQxN3AW#6br|7=2u;iD4vf0I|9izfL?s76rB7l9ohQ;7GbhTN3 zO?2>WJq}0Y!i|ewR_ZIA{F)bLETXZnEzncoal8B>3VmvS3R;@bZ;Teu*zcA{zB!1` z6|&#IIf+}@9G4n<$nC?NxLL_@zn|UaCw`kID3@%cjqlkm0x}tbnemuXf;RC?O|NLQ zeFq**{=~UJ7~>!#u8SAev#eR-OZGGIuo^g4J(C4y@~T9a&!+AB#j(gFdsu%-#HQ^B zQXyI2R&@lTPuI=Z`-8K3M|1L6KlU;Ptq*d3yZjGz?l8Mm|9NOUhn{W9>5I3b6ndxq z0wgJ!FCmrPajDx72@?acd$o{bhnD_hndh|wS;04-EyA2eS+M*M$52+KlEL7sfuY9i zA~YeD3{>{mfv{edW7(fnQ_=ra|Ey11VGYw|4kLF+R(+duVW;aedA+yYYUTj_2@Jgj zJEyW67j~7&TjJrW|Iy|2$lvQf`!)ZIO^EZ->+=6`>-IA1@sJtnjv0AkJ3xA8pI-IOXLja@NYUwUQ)t}#hD{)W9QB|Fa{-TkIfnuR# zKjc|3Uj%h<rrNF!L-N4g`ZnRJlhK3 z|Ms7aXF$w-4og8xD&ZG|%SQ*;FQMDWOs-+OJeu(YANfp43QBzUHw*cARik|OUJl~v zG~5V_(|H{xDbW&?QW8r`u!9<6?)nPFd{dS|b?FE!PiGEKQ9VY@r9~f&IvdtGTu*@c ztx^Csf%m~)n9^j{VIzz`KFYm|Az`b*Cm}s)(bOSN}ZPB1cPj+}?d0H>)h1z@qhuEz!(g zTLutthUw6VwLsHC#=XuRqn$O~&GDEue(dC{?)Tow#T{Hd%kz!qO};k6d}{v(-sMkq z&fnP$J3G!4Kp%4L9eG=gaRmSMRq>4VHmeE~U(!}&8V2c=dYzn$OC;R${+3a&4_-UC>lj`?&EwDJ0 zF`0&i?*dQ(NMsc4-gGVG->mk%R5%?IQZ$9e!10-^ThN$Bzcqey>mv zlqAs0Dc~hJmF=p^)0W3C_*W%+QsQgb;g%Yn#^>e!?E)x~wMiV%&h5$<*>cCjf_)6J z@vA1$6O4&Yh4SLc7ci12U6hd(X0w-2hxYnA3+zh*7FkOP;ulKfUrsO8n_RZO-5S3Z zn$@$^nWUoy{N4an>*!b4El5~&_0ayg{L`{oPr=8vZgjnUbYf4=@1R$w?|VD@RlCip zkLMy>cjzFc*;E_?Xr~Ml@TUOh!>_i!)4o^V1U6>hPT_WRcRb3wIlIO^>c1u6!cK}68^=p+?X7Gt=(3Eu z5of=>*pIh1*3S*iF1!`Z21;6;)792}7#RjKzx6wZvV#uNHm_Y42JBj%%iU~U0A{6u zwz82fz$X%0O}hhmDh!B0JCeki5=!?VJZw7|8n&Tt-O1xlBF1E*ztP!}=}&0t)J~Q* zo06Yj+@S;po5!+(I5WA9;wPDo@@Mv76K~f%*7r%9TlrgAeX#YP==bT~qisLZ1TSMH zC#_RU)qk}SQu&L7T)l(An7KC41;=8#DYj2sO`dZrnYcBi9l8PbF22>7b?5b}@A7GK zGInNvu7TN@WX%e0{9_aw|dPRXwLOWW0Q6VlOTF)2>f89guofBJPED;fkNHt zoB|J&oa%q+Z@)+7H$d}_|EDa|lR@}oPTm;@EZzF2IX>rCW2P&O?%0V?13!lntrrI5 zQ(pm2EP;wy9RrDO<%3Qu;HO>!8tc4xirY77aj0_s5ss&LWVV>&Uroqn&&0V;wlJFL z_uLdh1ls9;sWTyglJ@hf@78&o9{TO|=%9x4m~@YUke6J&%Y@zdJn4sK*iP4N7~J*v z(2=3&B>{Of%5o?8RA+Rqf*(uB0Fbc$$l*k#HrW!UbIBsjbhdLDlZ-*%%oAp^qhRdX zte-=t@JG?CtZQ0_YAX5d=J2kd#>8ScA)9cmK)PGwi zaiX1fehqrSlL$+lue=(z4&m`HkjcDenEbJ^G|4{l5AFKisqF zTjJ869cflT=4T#hEUkS9|6lpLQZBi`3tXckv*<@UTv34)k>aKK^@`E~tP`;Dh?erL zTC>g`jv%MxofE;vs}Cqa4`#BuYZf|XcQtiEl=9#q=K$)N-aw985gdwViI{qeWSTke zm*0q+fZ+QR@c9I2pUT+BbcRi0yp=f6pxnjVB<`mC`TDK%L)o9q$-Le<;&gZp+4sX4 zUY9fQR>wpfw8EPHunl0Es}2Y1rSiybT-qjrpK7rv<}Y!2@O9`ukA|fSar0psmTr4( z(Yb6saF+#{Z77!{Ynu#bJRfKG(I|gWl;*^iV*%mnhM&LSK&2gsv z0bHT+Bha=!zm1;H`tQM9-9MGj-g?_p23ov(soXCybsFzb z=B(QguiF-VYVtGPP98sOfy128cEhbqk;-SkCl=~>y-U>e-SJ_&hYoB!UV>n4#{l4> zZ#R0kGC%P6Af-Vb=3?cKI{oI2sQE~vnCB^H8^qntIz^&hT;_@N_mRuB&;m}X+T6&$$<%>GmhMG z?JNxULuUi}-a0+*(R2g9q+%rz)M+L9e6bkfVSk<-DaR1vBo>`7k*nl9%AA7ztAvQ0Vk7bLN+5A^~>P8{)#x z&+n~{$w56=h0JS)p0(E1p+2XS^I82V&5&-x<`EU&SaCehp~tbxo+G)WK|hoyl39oQ ze7%8($Iqy+M#WOuk2*FmYycO61LIo#r7vHa#Ks&%+nzGOfEz@lfsd2Bc#Yh188N3b+<4-nOJK_xG)UMF;{&u$3@CcLPxQ5RK_00 z#CE=!F-I-WTxD<0j%~jX*q-h`T@&y>=~D95+Yg!jO_EvVJBeNW$Zc%J@1z?Wk2c0} z;EESsD>0jHB%40!iPHsscWqbbhw&ziVsKdcfo8 z-6ThK88bQSYiA{n3tu;*{K@s(u|2h^t?~05Ph%qO97jO(p1Ixf zYf!$DZ#o(n%qDcwIAEkhf0GZc-MXcAGnyv8h=frOmq7-kH(Tkgph~Et^5)@ueALd1 z>zj|D+ZbpDU^TuU{qI?4qaFD<+xsox&w1ovDN?l4XnlSD1T36nVbVJRw&MOGW7e~? zPc($sk>)33`t7)1JoW_5R(5q_g?3lpEHJf~AsJo|!wUjsci2jnSK?<80RjrUJ5o!z zl~^ddSzUYWCJ5CULUFHpv{ak&SOaz@*iw(8=AzjHp*aaJndUK;1b9Yb-Z?UZ&B%^O zE~vw+Qba$hOuuZ0Nju2l4S*}SnBb%n(J#N3-K}4H4hU|1EMs~pJAo(oxL^7Y1$wt@ z>c8@kKBKKsh-?+A02J^>cU4btZ`2{r@8-lI+Ji5=vMQMb!%=;SKBisQA&B2!-@jcn?Vcyw-Y$~mS_F{veQAgcREl~_xbqp4-u|x)z2Bb_5SoiDnScP z3%VFJ05jQ+&ISU+84V#IK{lX}Q)Z88WEV%#v(0d9`ajPI_~>x-zL4mXq2()xFbT~~ zwlH1B z6U{9e{*afGa$XhoZ@f-Q*!u`AKsiu5Q1?prSH>2yji7_Zco9fF^0JSRTkM$Ro1m8A zo>>#mt#Oq&TRl@?`SvW& zsie&aI4To;v;G%=9RXPsz2fh_h9}v2lA(8o`9!nPwg(;XGcdV1j$4rQP8Z&fvD*_J z?`aI)(SEh7@)$u>+2W{w)vBPK!@jgkDFI8Z|5xMJiIrrB<>$+{Ja^$kP$IR`v5Sp+ z{F^iZLF0A`|Lb$q=^CGquVJeDO#RRE>jo8FZX*3cncFp6-`|MDgXBW{57VH}Bm+F= z*nSJNF)#LHYF&%dZ#~#;wz&lS_9nnEi-)rPo@4bl{PO_R?45s!qkgo0PkL;7zyqJj z-vs2alYr~Z=Quti>aAy;#x`L2SH(}e59%-iU59^4OjA^1$z-Xyb&*^CDET2{wHQ;6 z*1DHYt;Dfor>E+Yg;+Z@Q7k5YGE>Y6sAAx>bhriWo4kICF>dwVV~Ts-n;*E9Wr4+m zetahD)2Dvhjo%whhYqVPOVSY5Q#&5PlC5)eMzg?3*3d^DyGTqTT!ieDtPb+%RV0Wn z+7&chCMk4q1=36-EC{=Rl|xqOC0Ji6wj!6(HL?Ki^~M#ibN8VFZTZ`IKGQTG9(IWQ z;FE+=G{6qZBK%!En>`5L!}W<0ogIaEx|d&(g-Gqb{t1>!8z7}u5YipWwtd{sU0D41g6*(Oqi$O$M_d`yKzb0 zc(<%Fbg~?ix;M8bhb!?AQV%*Kb&^@=e{G9vCJ)iLx+vU|Aq&mnFdmGy*2Ddq459o} zIr-%NELZUJVE3-_3cLELlib_m+h>kf``f@k*$fOWXm9K7Q|qVoXNJ5qs3oh6(5vsV z{{_gEr>J#*$y9aXl?;n6uqp$aai;TJ6>6-~CsgCw<`8oDOImh;lk-q@oGwZ&^ zGYJK<=$l8b9JaYyuN@q>3lbUE6G*~T+yYS_mOyFV?Dk^vY@@qIpLwzqFPBE_Q_6G7 z>?v9C&doke?9G>*_-e>MKV8m6K!7`18yNWMeC3)-BO=Hlmio=Q{J|5@Ef$o&@=144cq$PHM_~ z2D{mUyHk0SC3{qWL(#!NZ?rxIhuc^$?&HZQtos%COrD*KP9TL~<9I0z$aA$e4TM=9 zA}|#k2kz51toE55lbh86&xq4FI5uupjkWFBbjKx=E4!SQXW~eF4KFzq4@+{rYw?=!Wn<$H2x$&+I8PQqJ=sQWt$zq ztLv~5Jha_!zBv#MUX!D0d((b}&toQ?PY=l$8|9j>OmBeWqLWLGO2-My*oh5!Y=A9) zgOXE5!!)>?0-Zh}xZ`iONfCXfm%~VB{`JLUzDhlD8OX(?xLr>G8Svv+zTG~{`Rr@@ zovCkeX?MGTA&&jY6lndld1qSwtcw-!9?EZQ9{fe~xs}NB#eyV%#O|dI5{PHtK{+Bn zKL+`$wi-QcY~u)ttVpL|OK+?}GYd&7p})n?w*){Hy@(sEpa3yXCh@4+x_L9_DjUGi$i0z>}eic09{2uGQ(|aSY%rqyw^@5@j4A`84Blr5a!5trAL7sL>(lxzg(2y3bTjJmr>be=<=2$K=^906k za!D{?AIK~*p$mA5t?m;ajo#`0wOLr7;b^q{A!u1T{>(=Z)VO*L+T`yAT3qkZuIDEc zObMEXy^8TQ2cyF21Y?9b!{$XDJuLY~fQ4ile1(7(Pu~y`bkGPiOm=RvjqZ3HaE~OV z7Lz%J-5a^Q%mG9Fq4(W)$H_7E+l)GQ-@$lZ_uD-`%EF&zcHslBUdd@2k7ZYxZ9dEj z0Qrnzd%M$a#G`Z*CKJUWL&eEa1{!w++7ds;mNAkuLNpfGR;`bXFR+Qx)3}{U9+r~88r*h(dg9j zIlZNIi&_dIC#A+l8p22Lg8>>A9S$q_7l45jg8^%9N4k(>l*ud?t&#+64?=#qo}9p~ zY>P}$H<|TRoP!sAWU)B{x%X86H}`SPti^BIzS`RcP;O2~b`@gDl^hX~`{`dQ1Dtd@ ziGkyKuf}yOE3LZ$WGBEk_K^<5(&0q0pI~Q!nDsXp2r&`l({HgKJ}k}&vj)a20an}j zkm^=P(#+*O@%7tM0pSgjHgqT)wxD?>lGp+lxfjR9y*Y@}nx2A`-(F8TxA8)o9L?y@ zHt+Q6ksmwh!74$Gcb69kD85Gd;aXXF17XCYvwxjDmd_d_Sp)GVlKp2Yl`H$1pbo8nGxAIC2 z-(~33L}m7*mbDIEhOZ;+7C44%U|ANeMq7z`PfhI_ht*so6 z0nkJgYF!rIb->xaCJpW>Hl_*eUIHfVtq>q+KgY4O1!$Y9(Xz-seJju)jzCA8oXQ;;)|t@aLSNq zx+(gHZ|c8Q;9mOg8Jsg{uG0Zs{f*}rhqFm~NP1zG#d3q*>c66{i>$o0Z*Rd>O`X}Z z?mYDs{MQ?$C*bvt_B-CM5t*5}J?q}Q=(8-I+x9Y@ykY;G>zf%NZw(Ob;-qQQ5 z&)>Ic{D2o&gq^A3dF+FVAR z-+Q(E^7eN_TtQv3_xkP+p@{3lkly;R*mf`W`OBnOEjwGYA_A@u<&ge|OK>5)ZbWeA z_e-P6j4`-h;~kmm&?8Bi~M0Fe8xBZv7nddMo7 zG$=B5Lg4pSCbt3{u^VKv+Pmxprj#Xq^5RpD6)anoe>Vg=h^_g9zJD6{&iW_W`$XS9 zc1T1LS#Ebw^Thu(yLKtddHlFd3tatVuI_vg72~IGpr6z<5(#|Ddp-ZK zh)@e5Lq~b2z?;-4tBH7^(E)~l)nJ#K(~AmtD9?xl3K%vvY(JveG=u(I0=z{t_5Ta1 z9Hqxr_Qx8JtIn`FzqWglHPa;9-Op@%ywiXCQ2$Nr zHY+X8Y+<1l1yCTi#tYj8o)f{^3sOT;Hbv8D+t}BVLwWD0@AWLM zm47gHW|EYux#8du>>R*GG@Y5jM@@&R?!=T>@J-B~v`)5ydPhD#lxsJefr9!KuLXEd z%6p>hC|@#vdOi7%zg_#l*9@fUuPDg0h<@e!jh4<=daUX;Q0mb4RKh#k?m3JXw`V;3NuQ&B5NxV!@tHRozN zT#P*y!qic!q`xNpiwpC)z8{%;lh)aYmKomIN}rHgR?~d$KcHL(+(5# zw5AuZU{BY(^0wws=eRhO2R?BB29i$g?qj{vxYce3+1~1`FLS?^g&>6q86Nvf`Y!aN zI?Y=w8*}|#S=l_|n81fHh<;#snwXi_?yHtw!-^w{=OdK{BI?M2wV^hz>e zko&z(6RbD7`$3(@-INc28?gvOF`2Wp-${$x9>Jo@D7`-+sYfdix_8G|JPFUX&~y`I&t(5FGOnC`!4$=?>q5 zh0JTL=O)}WgA@j^1Vq0wsC{Q-Iuu!d&BV4(mwLRPiW#PZ3UgIlbBVgKnH-vTJy z--Js9!;34SQ>lV!j9&LHZ2Sped)n1u!1AFY{pOlR<`Y9BZMR&bjj57g7(oacM`n%6 zkOc2<1|%q|&dsruvjRM^MA%CQoB(M3jAl@P;lBi&aBSKRFQb5N*Kx|#VG2rE1zOVi znuny?^xuqnla67{m+TU`@qW%lGbT1{@E%CNzn;Jf%ddqW=%cP>t@E+&I~}-Pw{ZvD z{Z_UE$ChoIWy12i`CjQ=cPs+22G-xWJI(-hxCf$+Llf=oP}+KglJ5Sk`swvT=9395Tkctrd^lm|+)Ybw!;3*#%7D z=a%X4(y~9cqpMxUybS4F$6yd_v=!-z28{E0bc(wjZb(i+f0CtO zwrCwwj69+1TVj~zfS+k+R(S7y{)&d1i~c)~I*wga7=ZLZeP7`p!hbxJslD9lKKOy; zZYvMY@wtq6LhlLfGoP$|rRNu21;}oT7rigR6-C$VO7lzWm(d5x>3l{#yy_JG>Li=w zIrtO=2%?Uoaj5sqx`Pr>4(A0B2C!#V>Dnb?O95n1A)O6oN=e&-STVYHf<%RP@>n`swDI&lK$ZY=-bjapH7q3PJF{sfdko8pONdeUl{^;O3nIpPa{u z&WYA1eEh0zex%&F7k~*UVFn!*eFrQZ1?AY=P8^R~ApGW9Dgv%9XeZdd)6 z%>KNJ{cHW*C1*nEYwY3;a|?prJ!H~=!kH6DwE$RNf}++v;1ZmMJfhG^Dyqm@E@eBe z5h?eS6FQCZhXLD;L>1RD!U)F1v%xn6{EW^kg8u}!71NL1#{7eY?&5n-3AK6M>|x!X ze!{Lgkn>=-4Chddt<3(QERdxcgny0~KLrY>qc%@|EJ7UmiN$Tc=6$85NYMb?U>E&6 z_{@~GU5fGp0OPdh3_9SaCEy2yF)O^3WXf#UAH38N49$dE>anXFrqoYi&dOh}R{}G^ zPBn>=;Fje~mfkEp_#}M(;4qt(_%Z4Hjb8>1&%C zeSe3&u7Wx1v&UnF=Ev+{A1?PnDmqH2Uk|<*EZ{Y~1omm=b1ohC>#D7-6plE6HglPz z2tB`kR%h>9^g(0lsT|Iz*8un`%`DDE0~T{f)`3bWV6Q1uGd9>+v~(cBEykr8-N-puJ;wKlf?AJ2+#ZOtxDrTy|{?k zY;%2AfIpLy2jKN8_Fd=V4!Pd)@C1aO9b^0TNVCbk1Rt*DA2<)NCv+E}Vo)8bTYj0A z&`+^-ZcSd{+F&z{y3}dA3227w^QQB7aT)2Z|7%L{H?iE6jndgg9<*4+U3X8s<|UfZ zCGbKk&Ry>V`R#SY3;K_>QUDwFS>W*`Uvh`__47mz`k^}V&MrRzD5c5Yr#i1M)+EH< zSchA-__56s(7RlB{g1(O2DTlna;ro9LE@-PwlX5OCF6OFwd^zE?zHjWr87(3A%w1) z1u=&5s4sXWy8=go`w?C00R2bkVz>!ryG)AE3C8y;;tBYgoTqt=a(%1mP|@(|RD?&l zRR8DwPkqL3H7HdPU*luu{ptqsIYQ478;kfH7LY3TEg*QSEJHUNc?y?WP!>%b9}U2O)au=XBq8 zrJb388~wLqJ6ty>a&nxLrxTBRKe1%o9Dq9{n95GlX-I&q_YJ#sSR1E<0q_%qyk*pO+Wq=?A!uhwtX<7Ig-81p8NZw%iopx(ZM{8Ee^lSw0}G&ZGCei z0IM6OLhagU*}^WXr`deTr)#coDZ@M#X%%p?sU3~W-RMeItg7o2kGv82jEn$-L4_3o8IL? zGrsM^RFB|jfT#cz1X_cG$;vBJ$a6h`Ru%>D=`-FVb? zPkLK|yBg8pYaqhtFzbr|_}tA!}k?Dq%tU?N|23prTOVdOc$r{NRq^DnHgyDwq| z>~wos!JiRBq>WBh%B_-O%HX6jljLKflJoMwo?~nRtNK%0K`H!H)DVTTu7q-I#!`)Q zT>c2GJ{CO3Fb@6a4#e>snY`h6D?x25mY;Sqmc)aYGylrO(Fj_%5w|$vC zjrJxr$Y;u&Wd6G$=K0lb3?o66{Iv726_+82(l>zRsh43*hKW|(y$gWp9A%L2%V^WV zwd@m~OFYpn_0Av`kLQw zb+-F%b`J=!h_TDKpZj=n5V!Ql6OdzD1lml}*Ab;HE4Q$`*uvEfi?a^ljua$K0FLC3 zfMc!5EAEzO0oCov&I3>yvdgb1BFe`I2TT40_)v$N4d7A*ftZ=Pavm+QDo5B7#q9!^ zwwa@Bng17qLEo$Ob=^+EfPPM&a9i_}Y&ALqc`A*^;KQGbioP|SfX|AmUVw9 zILxsIuvR`IO{VybvgH^0fs=N5q&Mk(m%Ys(+M`d12wMY_>*x~X&)Ip99W`_7kK8V~ z-ZisyCWCi5Iu%?X%KA#)wsT$3J!iKC$fcKTTl&9b<5f`l|6=1SQ2!=&?*fdQ?)37# ztZs41m`SQ-Ew>E?-ra-zIAM0B%E7$jyG% zV$4BQ6fM#(%;5LZ2rqpCVC%-X!hx=HtP^o}0@fFMX2{)!V@ZY~cs~2F=ZgY)EaX3= zr|o`woq(5)`9$-Rpyt+Yj!lD-P;gfWKJ*hhB%)epEWWSmw3 zhaYTgdVns<>;BLA-;ztKK*GIt;?mAXjYr1p>>@!|Or^039MU7CbD}rmhk{2-p!X^Q zz$>q!!#H~tm4ipXbGhEh>t=v;$aa^nM|w}cFV4uRbHl)2oMvU%P`;PlKGz|2y|c^OZU*Ml z{x&)G;hUrQXzbhX_3ig%=Q^jmfkbT>&w8MCL_cPw{dn%?xt>emb4vMH&sWe46kZB( zG0Wz%`{*n~cq({Za%F}i#+vvYja`9@TdxrCI?cNRSJhgpS_7*^0>HV(1mQfq!3dr(*+=*Ko19&cIiBrlvA2`>55&;Zo=4Tz* z5~q+m7Ae9iIjIg`*d?i~Qi7Tq3w(0$T!s-WwG`8;Tmi;e|Giiw!~}gq;2{Ub0L}pL zIK=@ysyRmRQI%Mj*&?S_f4Mgic+!vJ-M9On$n*7z@m&UZ1Merf)Bm8P_9-IobvCLLXpHKSSMbV=Q;!#oE%rViU!lRsnCmvO2wD zaoxB2#2!MH#Bi8B+Vd+-_p1jITUo!G@9me`%f_PW+k<|beBqz?qQ=v0bgpxGZn@FO zHea&qok0i2j_32%t!1bI#t*p4dXOC2bBW{2$g5w`C9i*lCs7BoDKFq576qY!*SsT( z!whcvPq}6wwd=q0Xf*t8G2l!Nnq-90S@#Ds2lZLd4G?V|ob;T%hTMAHGeJ+1** zob`}b$onCdDFL6W$f*2t~G;AqlDR?D%2>I7pR1^B1!SD-`Ogm$*j9?sC>58tdwI*qw0xfrz4J5GwjQB@j2 zv%)oAqhqCZOIiwoUcChk2Q{nQ7)Q&#>{nO7U?(Tr`2Ezxke4`>Q&|5fz<5{I%j1*m z?L*nDgWpdXTt8$#0Lo6FSjx(rn^o|!!VjMSGYv7<8by>vqY(~94T4}iGdVCw!R#xJ zMb$tu@YVsB=_t=8#^2gd@FR@+>{6x9xtqQUafx`yj)(Fv=gXap31$Ee-UUH|R9|9BRYyRH94Fj{rpDv;PJ+50O* z|KiVsh_^t`eoynUZnt%1`xpPtz#$824r63)viTZ*0rAxrqL-47F6FF;@7O9~VxZ*G z89ZAJAqn$l>-PPP-)MFe?fV)( z+U6&^7kjF5!r%JegWu8b4Dx-Ky%VT8mfd)Nb6x$1Kl_mycYz!Jn{xppYYjUcPmVx< zDH}ikd`I*%smtIaWDfYJ*IzcL0l<1ewu9>zar5d(bg`E;$NA64;4 zXS+AYAm+t&ajaLlby$EXe-FQivVW1Chy42j0w#KtQ7vhs()?A~ z02(5g6Oc7$I)cpAeAjV0nS&#KvI&quH#v48Ws~Uv-b=j zLi3`NvQ8uJ*3_Dw5?NXECb$N*B^EMZL8q>I9!*jG4_OZW5Y0uO8C|4?r5&j`0k1C8 zsMCu3{v?uTyWQpJ*OyO^o40SEL;^s&*?P1eWL;(D*5*|9;5%;Zp6)+gYkfQL0!~=N zskw$74?zys^?|MSz8jC`v7MSo;QdqKyYNfNk>V`ae)LnmKuq2mN%bB0W6#F^cl{qu zXRXGTj1CBW>qGp=>Q8;aU;ljbm{{>-eb(>~)co!4$4S1PmknE2@M>i&MAJM%B0N9)bYNYjd@SzN;3k76ypk3mCd9mGGU3Y+XK0Gq$oT_$AMOpq*g2rvH|@z)ubs^CmkTEqm-o{Wx9zkU{!w zo9tTfz#F-J<5Yfg?ZL(W;g333 z;YVQIK@Dko(;$GkGK9D}l3`g-xJi&>9&Mge1_M5z^=1r8&>fDTq;k?<ok3cv(`=z}2z0H%4TfKem2dD$~52XL2uWPbw zzxQ$n%MSOxdU7UF1~c~3UvS;)C~xRVkL=3=_uDhL1*D35(UsDfx1^c({J+KiUy24IW^8jk^dXKQ4<1L65_ZN7kkA zK^Ze^65@E)7Cxh08D^fV*Y=!MV+8jSvNT}L5M$>fa=U&ClsluF$aHaSVGckB;}FKw zT$zf967~+BES(^Ls@eoh|6c~)MqW?(V7#vp;bSq>hN7P_=y_)(zf#~1j4T1WfM{4B+%xH`KGBF42!wuu2?{Vcr*?)bqk7e_|-9>Vk z@FQn!{4MFYVRj87ZsOo(PbW66*P$Kc?g^tj>DAz1>r3%^XT>)?tAw>H8B`G9>UZ1m z5ufW4)a%XVhGg*%7tRlDI~&rTgxMxrCJJ#i^b-6~fRgb(qk23A=ze+Q^sOrZpi)jQ zss|bb4X%RH9&m6Bka7^7lLZGyN3j0lw01O(tB~dWz%D?Sk0U$LJ!ZR3s{^mNE%<97 zuHzlWzXNi!?Wbj*DEH*$H-dhRy+&Cd;t-E^FOH zh8?fCW(RjPz?4xG^UWY4?{osSi?|=PssSaS`=R~~eKUBY;-AyA zIEeBwML$uQ127J!mJZ3v8HL)zyBsj;Ir9GjXpug3^?wuGlHSExwf^j;D=N2Y&YpD+ zBP85U{cld@q3=oW{pFz!1g0k2FCqL1il=H=y>2%JcO{d`ro-Qb2DRC~`ZEO`J~k~J zAYb*D_vzU79%k}v zgP?lJsJv~C`r*kp{b!gAkON8m_wgK>o08whb_xizbgS=g0@0goKKOyRzQgX=CAn>` zYPM}PWv7Sb(aZO&DhY0M-{~3ZC*E)Oa7h3XKD8wsR|*~fx1=E?Xdp&zTD5#aZ`T+< zupe_!shF(?5whT}iX8ng>p{%A(Tslpkn^{-(I+k<55Ahzk(bn5Q0^cDLF)nc*ajRg2!r znBngF1qG-;z3FXC{ZDyqU8P5hHcd&O{XTpbGL*f~jeQG5WujUp=$E=fpmgBl#=~2B z`>;BV@rmyz+8^na+q*iLw2~dSW@w_0jbK8!!f=L58ie1H8Je!p9dOWyGQpUdL-H#7 zx2}WfF&41lKudm&bC=HM)p0PG$qv0e-&l%5+5PMK{tln6&E%|ouE|&D2UR{!t){_>4rk(9J9PP0`i(mVs)Azy1!QWQd;}sn~ z9szIyYX%rN@zDwW9CJkrzTgA%m-3pg;DxxRT%;dL!0$^I@y9~z`)NRhePGk`4Or0= z#%0P2?u#(eMpPo8WV_})`b1IRW3|=CSQZbdlhIf|>OY`{wRt~&f4bf!YOcY8+f|lt zb{}&76wuuGSj8VWiqX!y0VrVn48gKl5JIpQG|LcGKukD|&-&_T1|52_at%le0;kZ!Hz~_sWTsGjHnb3qK;ycu8 z<8h2K%9)i2vGj<(y$29f*#W%jfxQyOF!mD_*c-h~y;?L!i{wZ?`_X5ol(0&;+W~*d zT^0C|GHlQ*crG3Q<9u4`;_IzR{%`)xzp;P5{-3`DxCBqvISp>^M#qL^Q(j!;)u;9< z+OSpOC6CR?b2Gh+w~fG`*CQFJZ|2IrgQFifEW8MP_9UMUOpo?b6yn6 zub64L3pQVR9@IPk;EP0}`)Sac_$|GmblecyIpZ&)_jq9~4|MEZhm)!=;>#6KF z^?ys}|7X|#`oI4#Rxz0dOzSrRDx9EdRyj$*l$BviVqsBlYGTLDUhr)$hPEIY;@mZO z1P$xn1E4etYKCtzKwo+|{|DGGh+m4o)w<(I*&cKi))d42bGdg}lHh8S z&sD)HS#dCRvfHS?n@n#0rSmC2`YDG^uFW2jo2Ak4e_>(M8*O8(DVFMC71`DT{M-Nd zzp>w5M;H0Q{r?Y#asMFKfB%2|cbko$K6m>6k|_jR2Vc-=sUIjgej}R%Et;fny9dB% zJ!wC_e^0KchpPWBezJU|?H;fkW?{~CgW)RtSnk}_n3xrUquNFI-~NaH?b-qP`+xWE zO*~LJ<7gc4`)vW+$cLFo&W=XqrYv{b3L1wHjXth4w9WY4fi=;5zi#*6^{eP;-FSWf zkN)oOP(CCmF_$|x+=1@lTwa#2&UlufS_T}|`4UE}tOAmEMsLxN%D~waKqFt7cqoB> zu~qtD6hP+moYpxia{}=UwAa|DYV?4KyAM-TYmU7ijmVvZeDnZ5(2=1@-iD)neg6Hw z|KCJQwT8%;2Np+t1KOz?}vTz{)ctn(z%u0=&M}Y?`X5dP|hDx|LQ;gyIh|B zs#BP=GJ4BL40(V&8pPdG8+JaHxXCWCnH(>o<%Pe(&QNnY>2tDeSnX;>1`Q>bpbJj{ z^2N|5bHRVOY5JYJx-Q%`;N>Q|YE6;lm#G6pcG86hWjOW2|Nh_oyGE{0r$6e>%^TeO z#Ig1-{R(7E+ii4!Mk30-=sYQLuNyc56e9|L(t}TZUqCme!Ta$a|JmOmS>+`ko=Nam zo!}PA35Q`po&4|JIxe`U)w-~$vf{(Bc_WK;K*L{C~Gk|{e z8=UjvZ`!8Y4i~&mn}$?NngQS2OGIAyQo*3*PTjf|zOrt^N2CxZL1=17N1vKMWWauB zYoE#lwZ5(U?*5JzpMBq_boCdE;K>GH&i~b4_(~R>+Dy3ttP;7)K%)5o^#zMiC10E49o_SE52kh9hrMF7zSN~z>z5;H+odJmBY@N4w!72# zY83oZRC%>(-gUS3pqbe?-%7LNlL;3d=mR^G$_lf<*zO4SmleMo@A!!25QkWwvJ(aP zqW%6f_&Aq&r>lneRlEbVE+co@UP5v>SkHrCar91-egtMy!v?*>5=)P)RKuhxFX)7Y5d7-f1VN?%ZT=4JX+D zBW+9eAA*&GCYf>7<55P7=T5Bq2<`KbocO>`-2Bn8QPOO5x;*py_iBdv>$*Pwp>#m-z< z>A%R8>KJD$(U9_+Jg5Kg3c0r2!bhF_GH@H=KpJ8v~i;=F{Sp( zZktqzT}Mt={PKPh-Dp3_@Du%*_0{LSZc0FP=Hf_KYsJ)LZ#bd1hvlS{tWnTbiY-K7 zYe$#5WcLeyNR`}dJ06rhfPV%aIxLaH?(2ho-T5+%!cO8gi0%-07|%Yh8KJ}o9na04 z6)xc5gUz#y2R7e*``-xkLLF`Xr(5#Y zM=|6i)bO0H1}@HW_L<~L{n)*XI;W{Peql>_@y?_@0Tk7}+rYbJ#HZQ@p?#t8bU(Ix z(HzoXb)PdBzWSs*LY+#69JdoBt?#dltRa}nITO{9`Bh`PG-O|+HO&pYkkD=lRwFop z?8}>@QfCF;D|_Vy%|e-k;|K*ip!F(p8{^tq?-ziTx7ewV>o;=nq%#1JGf4wJCY>8C zAD?M6xKbb>UJvWSo13~j@yezoq5S*Rv~Bl4u^&MZluq6Ec?q%|p@Dkpo0-+E+b&S@nw>h-W2URj_o==0WpWw)l>HcW*D8#cQ}U|7`zp^|9$GmL_f9__H5 zbVB+YwEb`|w%!8k*7Um7-EI6wx&evUDs%n3-*Tl79OA=ZhyXJXRoWJs1gm*l0q(+d z7*-3G+iqbEJ>T9%!KHkQ?Im}Sbh7QjH3JT0z+mtpl8kNE$LSJs(bM0^F3=PKUqb{b z)^mh%EK0*;X4?WqnxPedAP8_L7s9G*vqz&}jSkAh=~<(VcO>S$h-UNsA(uwLlIIVCug7_L0)|nxn^7l2^)^mOF7^Q-98t;=1Z2AHrA~^3b9+vVErbv}1?M8# z#zvU!8KS5ye$%aVWVIsM8$kQR9nRMcIe`ZNkmWIPP0XKW1J?|wb6uGc>eBbWxi^XS;if7Ti3A(bC zSa|%qGWGQNSHNji9$>wcW>p>m$INu`HeQpQJO__H zc}Qk=*g3j2cD*`9n#$3}EAike>%*!Aztu=hz*C^jD+!QR$;Wx--|4~g2%lS|LUteDl4DRdXlIaBbagw6v+Fplb=R{JR z5==&8D1SJ42$1-b@y70Z`BW~c?h3WbkGz?cQVqd~V>>1n2A0@+^HK8STIp`0RbQqokl;MWpKXAHc1SmpGYwn!7 z%6s@UmCIdzMXg-esImf(wm>q9`R(cA1Puk+vc_liEE&G@_RCoR0R-LI`m>C-H zpbWbiUI{Ms+~BRJ&asbu2KxIwdyro(6a)Vo zdAi>(f{7vhjoze{`&E7YZ1+UJHoZRThhsuLfz9h*$8oFJ`w{?UJlh+> z)xq{LD_opWcAbZbUo(-8LU(2apk)7HCBk2?cj8kPQ%XYX)6q;RsZ74%{IJs*(0^n1 zg!)i=6&&))Q48q6zyZ2E>AE;e%z@oR#y`nk#_?Bk@E7@t55Dh>qJejJ-x3Pz(^g(E zy84HXmL66l;{?PW_>aTA{n~Z;$qyNUaHMYlNIBZ7Tu8~DLOW{HAct1RMwYta)var` zg1d8I5n$cA%&{A>hklTyZi$2PiMI3z^Z~w>?JkqvjxoL%%X94BZlA6cohZ&y|HF*Y z+Nu;)?%h6$QBfu|e_AmlKig!R$f!7Z`axZsr5*Km_q0eBp!s!4uX~< zvbub`6Memo0m4m|_WNBL*P3_wGs1w#lG zi}~X)p4GV7@tyjpf4t+l#Hs(#gA0u*dtpaS%Wu(yO8GYBdjuh!%5(>QtYb;{NymZ& zfF;t7g|OS_Jc=@H2G=+0C=$SYIO2YztUHoPThL$`x}>dUa!0Uo_5~6MfR@g1bEzee zaD3mqJu9NSmIkhK97Y4+oFhCt6^0ckJzUR@pl$hK@hjz=qE=9hXO@3SU6YA5YXxyx zSht=T>dMq;9Kg!y`*y_?Kxs1t`P}?YT0xue-mWJw=)XIL!#=tg;L?KMOj z*9Pc651N|cSH}Py5!%yvK4{8;f3thiVi5FJ$cJUq9RxBiuJr+F0LDzt=B9+WPr$RE z&lNdvG0#h9iUvGQaBS;_(!nt)tFzE`Ha_Z%utmk;aD3j$x;!YD&Pg6RboXd_uB~$< znZe?$X5BT|bYS8Os2eU|bDzJv3|#$(4OzI=6^MJ1r5d7IIu5p6Us;DXCwQ{PRsTKN z!pggGHpopx4>UeWI$g#=W|DWmjK2jpI~`Y$({wv{-dkj)Drz#R5=;m*GWi3!wE{)# ztEO7}ZoBMqWTPZ6{}V8{O$rlG`RoYB;Cyq}tzjL-#hj)u0ibHXr%Y2HbzG_cIe}s3 zQMRVF-hM)!L=X2SV!wDD*839~)B3X`^-og=d(}RU*{>gd_54gcwpZD1x8*a&os1St zd3@(<*L1^}r(Bz?@tpHZpq^m5(TJYSVLk>4c!?6ls|?v>-L*b&$9UxS_tV2evzK^Efjmx73aAo?+# z24p!6z{Hv9ot7i@D<+Ptoed~s0S*Y0;}}-dt8yhWCm=IQEBdUcKeJcIN&BJmy$2`a z9~&?Ou=JC|a6KNw@y>JWt!)t0<#ZpjadwvDn|$c;m#Tb_rw2K{%di7c*~Z_&z@M)B zc;ZNB0;^M?bfUjg&Ji%oF2Pa5yUL`w2G-esuD6N&iaM3-F=J#9em^+`moZTu`V6nm zCDTdEAKN*2k+*i_qw!0+0RAs7B?urln2!dA?Ry*>(f`agfhZfX zY;q+L4EBB2Kj?qtuvP=H%jyp@C=Udwbwo0B0x&MTYz0~LK3A)+4)Pd$fK--k_j7JB zf1g}I?%HJ7UGlPXNrXnWnReOY9w0a=mP9i+2y1kXBYDtoKiomMn9ic;KKM9Eq&YeK z(FZ(R%H2NdPfR(gk>&p~_+4B{P;EBkfPqnyHFt}iVh9^Fntr+0v0wE+b9!b11lTV6 zb006W#+?i3b%Dz$o+^Qjgp}6<=cwgf6V+}9hV%Ly7!Pm3ngZg7d;N-LmE}IlZoqre zcvJok^gOjcm4)pzpB&wlw-fD2H|J=pJ2J<;Xc@@RbKP4VVz00|TGAd~x6GZI4bdK% z91t=Q{N-eD%M){zd22DCl`C=nZ!0o=7ALih5+G|l#w#~Yc9PTSp zIH!pb`Oa((3@nmUK?MC%^xYVa2&ooF-4fk&?4CJi+gl(TJ(^+=Te35=uNl#l8`QBS z86E&rK&-#t>H6PfkrEyu=kq1-KwsU!?v$wi3A(HhDs;}JEy3V+{l-piEGf{g^{xLN z==-3z{XiD+)KGAiPs`-OySRrZ9iG>p=w3{E?z^wDtN;1ow7^sJ1P#_W3HZ_v9{f;> zo^sfC1TaUz;~!zp7n!tvz$NTH^~R6Gw%d>_)hxCnRL%a6IWVIhl5vAh;k-V1=8ohV zIp>EQXr6f`1|5=1mc75dE+=a@)wl1sfjRcmR6Xm`_WkH1)Oo|#duv1dHgxY3`%mvN z62(_NIFzYv2)WAyj@pQa;3i~DIe;3zyZC>D@5f5Fq|Al|iXT{V>Wf)RUQ+hm`*R@Q z5)36n{8u~E-HR|g@}U8>Qx5BQsdlKnER2)#W))UI83IAea){X6z%y4yML7CW-iIBM zXA-mgtA^1BrBidi{N7>;?@^sTrG6@W7QCxK9tz^1h_~xTd$DwH?+1lE$WroA5jnxV z*O@$Ib(R46+4lx8mWs9!O|7n$p#;!yWSC9YD-9BJjYK8>tjva8jCoy+A)8rzf0oyWp!&TI z-s{C5*587Dx&OKz#)A91J&`T{TfpBiP>8c&g&?pW(`&{9;4q55j`8(uR?u$R243=} zla=U4q2R4XzhpOMJ@*97O&y%)6kupejt#+PGf;zFj|Qvdk3YU;%e+ zunoA`!x*&nS@*`>0Rr3o%O!RgauEW$UscvxqQ3qOgJvTsX9eh840Lsw{|~0OR$c3{ zxwDn;JIjeFkI5+y-Sw7?^TZPh`V8hfzq^cD#}qvyZtmSCNZ-_>I9ayJ_WG98Dh9W9 zl(Si;`q2ipUr#pJ9?H4`3k*K!UgOJd_Pt8f!Qc44m0>#eHqAaNQ+A_$pb+X`G}F&y zjTc!-{%B@E<*;*7$6+y#j{862^?G(sPMwyCwek%TB)P~(2EH;r`r_hD^xq7B&u1N1 z&di&OmTpOdyi5I8dFHODnI>bL-p)=5z0i3qq$NMTgde$jM%K4Lqfb;bwr;JiuwtFH z{h}B{0quUpL;20$9$mu2Hr`YJy=g30(?MHfhOPIf|$Z7ozD%;Fsk;LC5-|Q(DhDXvCOAO4F`;NX9FtrUe%- zh5k<9S4v!|HqCUwKoI;zsGz%AKFxH0lKE)`vG0VvlaJHAYng!fCmH=C&=$631Gn+V zr#St6PwaWOE9q_D&+>GaGY$UfLqG)BsCJpb2mT=+KCyOG}a(uSiS*}fT}45Z<;z}w7XfeJSyC%;WbJ?$o~Lq~ zPCP`pI@5*?(gJ29(b<+SBgK&HFYft}!q@n`jn(^@+Z1^S(1YexCR%O3nHYjy zZaNdT*ApjkU+w*Z+;=07GMUH`R-Wj@;oh~rB6|6p@*4I=wh#Al{HRhVA!5u*m~u}`#Q8@x!I#VLH2N#srJ18LouWGK zXD6MY(IxX7);509r;xLz|C}>9hYtP!{{F^tQ0Q|m!--Xy{hN9rbLj`RPruXkB*XEh z&Cm7yU?cBxyaTFzYE$+CF0n6hvqigt4+9oA=X~YaE<8{4bMkYW9>x^m4u;g2;+y*j zZ^kyB2F5S+ZW-%mvPO5i*JlEc7;U@UGBd2p&-pLk#cXNPS#pXUPnmCTf}7-2B~!GM zFsNZhsQ)qMZce*XIK+X~K4)TiO-hvhH=Hdbn*K{)bhv#KyA2Lt*LV7--Mh^&5_C@2 z)BPGskakYA*&7)ppm?Bdr*>6v_RFH1Zs*JE*#+_cd~?-cQ;&nzM;%z?^FhEUJc8G| z#LO_a17eig^eL_Hk@aokZMm5`nL>PH63iSXK^NU;5E_QlHTe_okg#ZYROUo(thO1v z=;An}5A%jmjo0wngQ2wY=$i?t@jNtq5b7>a5u^S=DNjA909W-THk)&L6UaggP{XimV*-1jAS6fwu)P1 zS0(tiDK=PsjD6OSo!StLEkX1UAb6tuc?bP%sW&`{Ba+w`_#T690j% zYFJO8E0(JmG(GUOHqR{ zYdzpw3i#3QK`&f`4$R%OJhCmqMfJUIh|N0QudBQv zb!w_J> zP==!yeSdT&f~=eXwV)FF%Q^yX^!1>RZ&ut?wlZTE^2`VHk-DDae^vjgMUj(O2YevNOW;vI0gb^XdJdf2ulIQ0xsi3 zVRm5#202WIxTbUAp8PAfbX2agU;>_Ayya^~OF$PVm6@SqD0!mb%eZaMUiNQuw}U*` zvJyVC-fKLe{9t+t;Jv#lvwP-|bCI>*%dy$rL7eKu8~yl1_HN&W3Hu}n(Ql`0cgoc? z86{&Xn)xZg$}(DCYiVA8mtp}419ufzgT^?(y9H4kB4@5 z8t41`UNVrPZRMH*M;K#Y)t11rlJn&Vyml6-HVdlAt}=EpKqibjL8@^&$|#_ndYH*0 zv(n2<9PoKRYwh&8DfVSdYN=)?&lR`QZgjmB&D6Or|CpQTVsBhd_tD1bVgVGIIC;fB z-u$S&yY4kyj4PP<-F0%BxF1wLd(>U(yZk=&F$EH5D(nLtyWO8Qb1GxB9Rn8XE?fYF zBOuBIjdLf&XkUGNhb-3cGw;d(rUKYaAHA4#21rdb*4*rQ66|DD5=sJ`>18oNW;2ko z)Tz>UbnqfsS}nUururXQ){f$Eo-zQ5i;-mfnSFkftumg~a;MR$oeQvs)s1=}gD~)i4B7^? zii;d$%_V}FG2=%WjsVlqZ(i2@Nyhg3J!_@)KXFR$F9Og_mQUHWQ=d1T-|}2h8R_P< zW_y(z-`Eo16a}bEHIl|IpMU7K)=%5y_>wRq8vb$w1TvI$c39;pF6OBvRSddVHYoJ? z)@dTW=)m6Q_mx-}0}PWlpOj(o1234v;nS*60b3k69OK_BSgkc>jB-$Opx`2=E)BZ7 znX+Zml%}1oi@vB8R6|^z-xOGFyxWrw+DBw#(Y=V zWZwrsGYCgcd307v8h6eQ4FAaL*VmWu+g5iix0`8jA^}FQ>IwkDOo9m6jr5{`=MjYk zd`Xa|OH)CcQIUrJ!^b+R*+@!F84FfSoy^Xo*%&)b-%ZYT4>7(?EOeoBqkYw^&CFl4 zZ|Y{m(PnHy82eZ#A$}Y6?RWGjsHCU+f2*}g`{n#D4P}3(f}5^qc|eN07O%Sz`)ks- zu`qn~zJp2mk;>}$>|_i-TrBNwovmd}`4IXAE?EUO zp@aF=6}S5^6+)G0BDM}Bz+Sdtm*^R#4#+4a zHiPhKHEw-A>SG05MoMdJ$({B1X?I({4?)m{T%&Ur zkXnzHT!?to?N9DiAR9p5q05IXD}xR%!B~ddWo}-uMcCc?u8ps)iGa@@uB;nyLD zKlQ$Ogffpz*=GM;!QP@NiGnq$)PKZx0`v?k+OpF0|He;|+~hlO#=gWkcVKD|oR54C z;A{17haILq_|1ZT62`Y3+>+|*v@5#IXEF)sq?XZ*x|L( zMeBew8n6cq-g0Y6OJ}*O0}0tBskuiG?A12PN9Z_sg2NOpt?&Ir34BQUo`s20v(Qg4 zhOWSYs*6t60=NPi9w$S<99{oS<12abLyURky}T~3;dPt%q(Ddf$~Zp>pXQiVczpy9 zA32plxkdb3e(UrejDAwtE(A@iBLMMq-IU|%oN7a8({TV1!xX8pV)L%{bg4|v`1x#?9j%1dTpo=ev9IX4i4ofN)8Y@xv>0Q|ei8dcM$zp(Z~2IIXi2|{EdebeiCFP`oKPyHJA6{Yii;GOl;XEM@OX{}p6 zzbE3LY4MYvDLr#2!)xih+bZhmDm2AdSw}`vzQe@^@|eBKb*^JROIt2Bi1EO^+xK_p zA9fkG6nf8bt)OQyMh1O|p(Meqb`0lSqsCX=P~kg>HtnKIbDy=^_4dA7vq@8k3D`+7g=TX_MI%^$qR2Z4Fm)Ln> zoAq1?K~{#oF7_YJWq^A#+s+xP{T!Aq)D;P91N5n7Z3*+h;9CZvIl^+hbW)^A%8q^< zJ0^`I>+9^pNIuEyr&1UR1iH5F&ZO#Rl_RY?eVakJIv>%$-&~Q=f(H2OzFY;}jfKMp z2PX2&!1nNJ^^XAHMZXt1ji|*qIw)$Xoj`jxe-sUdiWBcxvev6B$Ri#M z?$qF8Q^oc`OPTy}ERDv;%R!mQRTM#F7n7;7?{>IU#+pC7nI#T(qjRh#pKA9{+P%u6 z@vJob9Z#q?D6)UE&3D|clZ$w6A=Pq$G$A@X%j>>EH1z3~ee+gPZCl62JLJ3)fPu@9LBwz>fLm@iAaGw5a>p&yrmRHeT~6 z_%HQO*C;NDE7<`lK`_b}#IS)_E1`*x4RB2?qoTSAgFgiLNuVE+A2M{tL7!0(wUkVl4XwCmTZ%IxSv6X0B1LgiveVI(8hXB&|+=Aw%=FT zBe&5$Pe%SGTaR)!3*AMp`~5SGNg~P)9CUAUnrXJu@JU&HQXZFeE!z|+d!2V#*AQB| z3+Kn_0V_u5V*E@6^P-I|_e>5wR`7l3@)_z#&H;@$IPIs7HD$UPSHsuUA6Cn4sFaN`H&Epmmm1n zaNiFLbeq-hnN(>s12#SIndphZF3B$WfLEZ*gxY-L+pKaHhfVb|3;O1rjjt$k zkMGP@?`=vKE%iT4K_4h(FxGX}g{KltuNmb$tRW?FQAB{n!O^-`y8i;7?F8HvT*m|0 z-gMp|zq|6&62~mDUj@%K8z+XWCEnu3>xIUCANaz@D%Uxtr}>$bZnGl4cmFSebJNEt z8dcYtJzby8PXyeF6U8rI;)-zw{wM)edvDwR`~c>Wfl^jCBpl{!uIiDpyb{Z9^(MOZ z!kuM42nE$C*_g*%qQ0Yp@|8re8gq_M*QwruH3phNk|7kziL!b5gHhcIq%T^5q^rii zs+|q|S+JuF=VENg^Umk#@+0kw1G?0`-M?NUePsw&7GA`WHOLbymoY9jqZYmOB}X`V zgpUr6zEFXM2~dB1c%GG22F(EMmt*+Z&ir|6mIZfX3Ro6+Tv^g~Ttzr%#!Dt6AU`lH z$~P5*R8~$R@~@KiL0Zj2@u+n$?gSIVA)E~GZV*ja8Fy~-esMxKS+zsiG5D~-w`Afz z2Ul1+KbA)9GZ@pb(>B)kYEgWxX?JNZ%ld_ksf#|4iVB4fe!PMZ0L8(db$*;FuXHx~ zUwR#|yrcKSRBAZcvFgx% zZznI3WDpLO*G*QN3=a}+#UuLhqTcHkonwH0;c&kfSO4ZSIKR+oz_U}Z83>AV_w)hU zUuf`w#LJ2hxTyKPGn=|Ip_!fCoRg*)HBd*Zj;SYp~W^>mt zy=-=wR-l@7lh0nf8bnX9E@z0u!Wbk3qEt2$!V$7llDa4MKUJMJ=d#MQo_Q1vXTB=w z{JOvSJ8%Bxt8PkaK!LDX4@Rsn?I(trQxbaALB!)=h`TVorChbAk_aoB}yS|Kn=2% zvb;dh>($uEvdVHr?FOU?PyH~QepqvrzJ+{695dEQM;>?;;70xF4pR+maN?Xit>uaG z2kDJk#ukY)PyG+k|HOkYUC+M@6r4`lJx=;AM+2k8#Sm4k)$JA>91=kp%QIRG&cEnbZt< zE_Kdr@*=9!J|Nrr$>ei06QN!pXj7f|vdl)qO6guqpQ+R(4~{f{M9oZ%t)EPQ-tc$e zK3~IIzJ(snQkVJ+|KSBij3FY1QS)mIMVmCnJ?2BZ5U;QPw*9=i_x;>~{)T7LUMq6s zz`Y@ogx{P-vveRnw(NrETQi6Ou3G6=n18drJ)G0X%&wVc$kIV%A=E}4i)g&}!6Y=} zuwmAhyHV{YnJr5!8m28HJAxVq;yM!J&LZqLTeN z_IJ4_3qZ>JH)fxMw*&Zb_pQEdv_m~}b9~L=y2w@Q1fp2?BXuH%O#t0^{T1(}3uWjQ z;mqt<52h(gUOO(~6kqF%HN7L3#tf_Q1VyDWUe3#u?`Di8+a)uA-4PIl)cV(XQgSI=zE4`io3iv$9>rIb_Xs~D6$pc{TgfS2y z=!3r3e3`aCPSR{&-&3+mqoG_(G6lwM zqW?KhJuphX^{D3R$lVTdU}m@Ayr%b^tQG7#3C_vJ$0*afLsjJdfqq1@PxdsH8LTw= zQ2~?qz3N7MfZg?DQiY+^V63ww_q_L|M**`g7S}ZKdK!xXrRAMw_p^_!z1UGl7_FE~ z&`$=no<6E2jG@nf_(Osmt%FyaKH9s^C<3<5dTMTch#FtR zy9RBv;E2v{QTXZJEc5OAMTGpZ^eTL3NjPV&KIwDoC-ycsivEVbcq*KMQk3z|#YDYg z8u}j^AE$$B9b?@!oHY~l9cig)X}SQ3S6{*kl{Hgv7sb1d5Ms4%gi}=$1iA2CZH8l$ z&1^SQkhXX?{XMR-M>XEp+(juVbv7r})$r6nw(OGGvAgy=wCi4TWhu7?l(Uoksv|k| zp}N@U&%oS$Yv%`=XLmf0!bRNpz1Xy2OmyF1_=QE%z`8|-CH2mSb zput`8=yXDM^`!_Va`=$;1u`6};_~u`A&(IXe3}+0MSvUCe{qgPO-^jkpYiB(>n1@+ zwzU>`r^9G=h8c1y5BoP$A_fc?hiY`7UZP>CaouQW|emTccK#}29`1kkjkT77Mm}i4&zLHGjZI7hdfJ?LiI6q9x~oMmUWMW zqE#0M<4GrKcN51=f=+K7GrL}gWY4Mo=07&+*xODUx{d4dz53kc^`;A__D3Iwy2~h+ zPF`r3`<2F%4kiP~X0?FQP1-u_C?x+d?h&-%YOSj+2)e*6qnyzn=6Ad_r!!V_BAlij zhdp2aL0yBG#iITU0nBH1#$|wrYtoh7u>V(;zN2C$&v9)#=MZ=XP=WCVhXV4A>{p*g z<0S6a8GLUmG0N0HZgs@-U)!4}N)AG(i!;{>9Dyx3EZ#Ip+gXhgb+?>_p zBwel;!2#)Cf|d^`+9@${nim+<8!$BTlmB1>qtnIJE!ZU1jAJNBG6UZD)-$Pf{?No~ zpFEueqryx8oCn3Pzu9Cpl?Tt0vrcB1dAIdeAPzsM=jq&lZ8dg}1c)L_kpQ%gMuwIC zr}Rg(w-{-kXK5zvSu*8^xsuwm_4yjZH%wN`uyT^Kg_nbCGUg9`LZjXLTum_b7W{Sk z!Ebes^4)kp>rHRnY42qYfRjI6i^>iqW&ze0@U%!4XlZ>An53N)(k43&Y>y*;MW9OQ6r7!Ln82UpRWHbD<2e+`B+X=Rx;gbPBCbkX2NO$ zp-=hDBLLhOK(oVrlsC<&kxx0}(x9!#!-i2FeAd0sq5razvVQtoIwy19E)9b9-lP*Z zM0z9&`Mvfkz3lPT66%P#0}}nnQhoKNrU+gl|Nyw=brFa8 z&eliQ06FgcjOV;=RChO+JWSwrXuCYGl)O=#CcJ8Kh5|m)u+vy#r$1;gzj<)%&R0Ok zee#3+$#Ib-5DJ367HaRWfioyp2VqgxweupkN?Em%7+@#=jtnt^56%fln{5Hf*cNr= zWf+Do2Ga#OMQ7C$2jimpI#;6ol!24{LM!feZ(Jj&Ny6u<(#O1il13ub5j4HiyICF= zE_~?TtXl?hI1Vu%+kJDnAI)~C?v;T{oC82~2sp@BXtt0bJfG1p$@bgXSL3*24HoCV zv;Tf2=g7apDC!+sROi#OMBl~W=m9NBAsC{WR%{WJ2lCg#U!t7$b1zG#i7)|?|e7H+yx&GIdZE<&Sd-65)C9OCy zKs3O&7=WSX9Enpe{m0m1{~J9C@Fbas@g#lf|5ran>*=Cw=zlhTFGu~_^#;#m#1Tgv zWqVvVKd@*}xz>jy0hH>yKB9ewsc(vgzBhrfcUO#0n|$5UI*qa7<~4sj61?aDV@>^!+A&FgS#oX7_fNIq{ei2Xcs3^% zbzL+$xa%**W+i`K^uEBPZP_I0Z#h7VVUCrf?TWoTI2qk|o&@UpU5sze5C(4_U8B!= zwE#&o$G>nYI^9*bpXnz3jbs5UVJZS=w)3b|Np49j0szh@K}S2V{rcMli$??-4JZwR zVB+B^2lyd&H$hF(wYGz>szeuxa5=)&yK7tg*4YU-$jzL?*)`tHtSPD}egt;3>TjRC z2I1cKjTHc!9fQ!5Ox@%|BDbxN`stf)+~`Rw3ILDaNT&DbG(>-5Bn)=iGJb*@Bd{re z6BqB0AE_KM%-Yl$HfsRNO^F9H_kQwS?lQ}6Fm)}f)r_g<0duyVyeIr{=T?iH02Fx+ zZkc29rIQyS&%nY&nM0B^Awv~KFQ6!&G_j3k-97ah$6q^~b4)IZY~GwFMpsvf1PZ@ya*!fnfH@F>-O^q zvdZ3{GU5QO?O6rRv>yjmK-$Z9>$=G99{d8z%HIX~mmwyj(Z=_1IVD5a5Wep)UlG2! zvk+0`j*Zj1EmHKsCiq+USo)u~t~9ZZG5SfKn*2^)?XDmF{)5mTu9KX7zX^m+{_S;% zFR|gD-tUNXa1tZZv>15MmrH7n=PelVpBrUwS!A zrg(?KW$NG5559hRGAt@_*rieZr!^jRi+!P_AG_>2feCk0b=?vMF&UveKTeU z%KUfg!=S4zLh4P2aN^q;HGr|@sH1?*l7LXBwfAcWoCn#91CR5L%7Muiuwc8FOxig6 zZuyKxIS2rZw7(`g&_Wj(j$`+b%2)2EGF`~ZrlV2$PT%L8)QI4$z(JPdaXNt+Y>4{n zZ2NGKkWqPvc9@TT$&pT5nQ>&+6u>JGjW;r8cCbfwzHkKSW+U0R4_ONR@M}k>Amc3a z=PNE;tM1MEO{U{UdCb=io@@>#M!g8N%Q#h}J0LiB?qQYfrIm!QA6;l5K^DBrSu@vJ zKfb=cUJ=0edT=~Y5&i(#;iS#syEQ*0(}HnS&LQ=uKQo!1E@$8Co-t$GgvY(Sf0WeD z*gDNZ>3@ItYW5-xb4c;y<&vZ_gjwBhCjva=2FSBR=u@*|~ zYSP;!y86A@6aDOEDl$^f)m*0kSO2Xh-go~W`))|HzfQu#jvRs*?0O^gPGQ#_hAgHH zWY8k^pIQ>Z^N$7E;72K!O%h)Ia`^%*Nu(2vZ7p1$naW{msW9ZBN*eSbt4_Wch4n*D z9OOgj)A*DybwRiZS+uVXX8n-$|KNHAbWpqv2))1Jll!Vi3Bu{F3E#Jhp?E(@pn z_jSMaN#OBXeZRJSciqNALp9~KgPV>V@;7hz5H>^o*oQ10f7d$f_`L|Z*$C9F0$gK| z8|7HS7>xHMTX!@)05+dLe2%qLgU?i?wv}9a=^=Q5oJn9`Iy$vwt#jB&4thU_41L88 z3;QK)>f=c~uxo>W%s9t>s{Du7&4)A~Gm}@l3hvfKXqe~(?>y*UJR}-!ZTR~FnEZqG zt;aA$S47k)0=KUJpo6JSO~bT%vu|!Y(`7OocFEuD z3jRh80B~CZAmXw8P4+&%uR9+2E%i?{-rbE6z?^g`KIP9aFS#(uU)$jsGHo0E3LT;r z-^_ZTA~z$@2Evd&#l62Nan+Z0W%Cz6U)`@a7s~TPkrlGt87D3+Dd!8`b@xc@xc6k7 z%m1lxeMR)>m`AsA>Bnm3hP**pO8*^)XV%y_p!z!?!<*iGOSkvp%FLSc&}^BORr#Iv zQIMf-gxwD@b$zi%4%E8jK?v&j(k)cLE}k|nu7Cu zt5aH?np6K+s!<;ATKt6|paBRKSV{XOZR=g|#%@dwzt@>_+mBz-ak%$@9L_{`U0CLt z4XaOpI>&kXI_|=-q8S)ZRVm=uW#a@~{7taX@3?&wARGduJMA)7#dKwvZaVh4?B*p| zE2WdNDZuZkBl%HtZFVrQ(^j-2B&Iub8*w=g0dY^u2cWY0&iD7@-3=1(QvbD+#(VW8 z`WOAUlNgH%Y`$atb=alBZYCxi0O%+f7H z!zxkjw$awO>VG!VNId{o3`R0c?BxyUKjw4+OX!>J0d7rtfNfMO|HS?(0sRM8PLt`_ zQ;?;SH`$ukNk;mR#()k9CQTlr&g65_-o2Y-N(XPhNlI%U_X@F@2yH{z=1&zv=x9r5 z9lB5q)9m-FTa{zk4Y!iDqC*_xx|<*bRgc95kA!UQ=yj=~jb0~a0>KD(A4UIZ-tnVI zqaL_+U_3Ch=|9DVft{zqDxl*4+I#ZU>@SP8i&OtyQF#dPnV(NI=KWK748=Rvi=beC z+6NRPba&zd0O*(d$NKS0Ba|t}QiPtlS1gA62~fz~jKTr!-PH{w0+L!ke`5hqR(CGo ziA?SC&$ha39fon2!Ri z>yp@!#sk}~Kz7JDWC{J?{E1c9l@*HSd=b~T{?+OtScn7yJJa*hI^Ksajwoc;qbh(6 zt8>a4e5-f;UYWDzz}DQ&EZpiDJ0YojKER7dfA~F05@G3`6B_fFqH=DhDe3mJEDODG zZ;(2=&$Zl_@~CEY!-ZDz2E+}&rF<)|b{RwCL)yB~IQgaC9oDJQ4t(mtZysYFx} z2>g|Cgj0$aj>434{s? zRQxB0sYnvlHw7?GVTrNHZbNP9jj_lki|l2aM(dRB!}-dnBLSiEyY~Im*qC=fYsu%z zPEX^~ChXxlgZ>Uu_;qjG?$7e83@hDXuw&dadotv+>^aLisuqo$xi}4EC=i{RI6pRf zp6l3Xb1L}Uwx=zkv)S10+vRy&i!$e(^+-EfvV^Q>?gZ!#MRl3S37H9Uv*{HzNY3Ef z;{2woP5;GI=bSNU@pZ~c|sCxw?;PVIPo zetC<(YtASGs~4rfJ2kJg`=j*r{bhH*xYJhhyaX)8cI;e(8$A!-XN}6-MZ#%vq94N* z+GqW@+QrLblN`DCRyh+$P)7EZ`rmz8@Si5V4>%<*-`R86dt3e>({a2jTuOTZmGA8E z!zE7P_4DAH&K%Y6h~xcrj|mY}-r6ZAW#n_M>=n_rY3f?S|^*~k9sM6S%_Yac?~?`x6~oF1#IeXCP$s&Z=nDYc!>Th zYB&L^nkjn~=4*Jx-%a);Z7v)O@2mb&Q99e>HGp8F%gwgf&?xP^i2gQADEMb1Od}h6zN5`l0}HITL9xq-%fl`4#JT|eRXK{d1SL? zXJ2|0dA8jvh+5=o_|>7sNx>b*L%L^k?U(&O1hV991xY-D1?`nTyk<6okYI)^?=%)~ zYks;{nWL6nGJ6|@`(a1qc!Bl|bhZ3}?;HI<+t?o()H6<~OxoTFw);u*r2}q=WbMc| zZyiQ1Tgi4G&+8-dxd-PN)@HZ#ym(_@Co7D+hVT^)gkx7P#PKXk?h+Vh^$K9t?dH@f zP&YiM;&3ue|1oD#j?F~$t-xa_FdMHdts&tr<;o5y=R<9DnAsM19KcZ=WDj@TMCQg^ ztIUO2lckn8Q0$>{CjfnupA0^338vF^)%PVBo32t`wA%}fowoN1CVbnR13y+RN*)Zt zy~mO{uMql%YBB&OE6o;fN1a@Q7U%1LEG-={yx;A6SLg{#_N(00v-^LYM-|GoR@YJ)Me zh=b@X`Lq7Z5iFO_Zjj98QcXcUnOG}lV9!E!EZ4vyp4AF8+&;a64#aLes1t0r{VnNJ zyZ0l=dX+xb9gF-9qx;>pXKY8O5HI28gXf@Ah8t1%GL|^b^-|EW=ze4$+1oB*+%5zO zSWrj*F3)XD0G6L{g2lmj$SW8m92vt7&E%cgiqPcrVptL*iRMP&aJuet=haTLOJ;To zKnIg=`_SwzwroF@G0@zNG?r!W=bVwYE4pgxr8>bZVw7G-*d?R8(_RwdCS!=TR%JsC zyBUx{Jr0s&{3z2szN%vv%Q+bJ-*>iLfm|e4+o}veXSu6K5LWhf1@zoKDR5@r-*~Ht zrI?N5C<&MX=ZvMx9(?q6rE}ht>oQk$J;>fJBDKq67d=qf#=X6gG>^#+k`EieXrDsr zdQJWzS8cuAuloCre&cT+23)O2`lOy_3 z2K+VIW}^R|`met66B$rxcTzDs`k@(+*e89IqdWPSIMBS&eOIoDD?2BW9(6-(`+jfw zk3(A@I=Of$-(bsfJ`KZLDD0Y&F*ORY$$2K2f^Gy$8>ToTYUji@B$RwcWJC)O7DbSl z&FtVSp(FDoy|}5^^}ky@?8qAw!56L+{jV{X^i#e%zP1edP59+sLXRfKstRLRbPgp5 z$Eddkc)V`H*X~ER1Wg&G{_T4_bw22CfyKqC#_@i?1A#i1zUMIok1R&;v4vV#ZfoWD z%8I7FT$$q9EfL<Qvdw(X!*JY%bZv<$0-2DbP3A2FtC=MR8HWEM zqacLoz|6I?pkGN~L(UbTwcrO_8YVmy(3j(dNJF`A>m(-0O!Z(I$TvaEyZfb`aRgR0 zx*vd_yH?7X-&5bXpMl8c17h-OR#wv(d~CFtG4cynr(Yi4rapw0;PZMONr7~1vf#Zd z82AQktn@K-7r-;H%{EJTZON3;5eI=wG4X%1_x?Kb^~{z~)gxlAfI&hak{QjUkRg#F zK>`6cNkBwEgmlg|K!SuwxB;Zey7-=UtyQba_U`_@b2u}Iv%l~Cb+@-&F5C5IRoQz# zXWOX@SH^%~aLrRa`&7F;9B-gZ&)oOyr^zqbs9^4a?ZJIva*%x>2+H;WlC3&XbUzadCZpF|+$^NmA63Y5mM zO0uO7HM+SR8^Glu^%~wUu849TL1XYNp7Ei~XZb`mr{8NJcjYy^@_z(xvwTGD zH^Z-^P+%Azc)9Y}GyaC)VHsf9I)`P&0Cd4u;E`ty(`Y+D(;99WV}$`}_9Kn9+_}tV z$S4^g;$IrxcmL-5&dZzU1UsVeZekuZ<4{h2XDemWF>lm{7VNZn&ilPAv(9O6-ktg< z&4@u*GJCDg5meZn=DlC_*WUEtTSNbqLqYz;D2sKEV1Fmp1WL=+eA?bkfu>JD4goEH z_JE=F$n7oeBD#VdckeGdptDHIrCvOyvA~G8qfkrtn1Pi6pkC=AgM$$Sv+t&l)PFLA z5GhJ{6Y$lMGyp$GnaY1O1sY=JGW;P^bhQztQtfk%t^ej^6I2$>dGR2N67xYhMKhi`FYxrEzQV#Z3p;n` zNU8EmeTPJLKXQj6Aa`7A)D_?e@Si`oVHkG~*DIl292ujN^}; zNq)jf#hOfm-lCQU5oWcV2#TC>^*TOiD;c z!P@aHSjtGd>u0oaUC@Uzf2gz7_kD-rTd=ig#21P>Xn&n)2mqZ?ZkJhE*X14}RfCyA z-~fytJYrFf1&YJK!`7O3js^H-*>Ql@$TRYYueq4(yA$w@_>VjxjTZYL>TL{p6r`Hl z@2hd^0ba?vTC|l4rDwMZR6qztcZB*8;%FEE@vOf02M5=9JHiU-syei}+_8O~@_7S0 z-%2t2gaO9)51{=-BR-Wo`aw6{vFrjGRuYfb0@*wY@orwY6SnC zi|}^d*T-`Zfb!B$fgaj6q_7gSxPtU-L zy?CIr0~30QW1s_bdN()Pj5WvdH+*K2A?Cs2{fgeP_4r3`x(H#qJv9U3jLo|WSajE3UIqT0fq)O)N1x>bN_i^N z&#nl@GI0aIL;G(1g$9o2q%4=OGtOfg6VhJ3Y49@n zZtc#z$MKHudiD_1JoysHqWkG@c8nug&S&t<mZw)S~pC1$F-&*IJ#f8j4$sA^EFp zw*kwNMx6&-_i~qkXI(vQ3x%7`0QJ3gJeXC2)o|}XW{D)Ts@pJ}V}zX5aycX5;zJaB zK{~I8VMFBK+g5$+G&aDtMjB8G=HzpGGzlVLiy@vyXXe(&-;!7ugSCY@1BvscGW;j? z)evMbg)z17Q;ukS4z!;=uJmDD9$WC_-H_YIp_ zMWyuWr_9H*Mm@ST@egZtBF7SHL8iS3ef~r(!P=cjpXmk-EIE+`fQ<3r2l9({%nU?{#Bogf4|(n`kOzxa%Xe)49qAx za5JO3NS7Qe5)-IrwK8At>;2kuKk8<)o5G{|hWzL!L6Fcg1DJ9>PgMgrV9KALvcvFi z?oOpod*1NZA{P|d`UpE>c@oo~HiNaiRUpv7@{;4AZ{YZI43ma$-*N>w8I`f=+3M)^ z$Mq*Fvt17vt!ac?pDCmaU`B@Orc$RewNF*O3M*fy512Lm?@qS?cG+xd#EUfB)Tz{3u5lRT{2XCC)5l{@Eu zF`S?3%2K1SGMSrSGYggBgJViC@Z_K(ri;$D=m9I{L`VVMSijd>@xNc=QaxBAs{tKirjwavvcd*4Adt%TI_c;m+fa zqap(wLW-y(Cpkt=p4o%G&#RbhMy>klK(p@Y9QgX{#@^=G3w&tsp;fGypY(S=FQZCk zTqfK$XeD%hFqwON75vNbAh4*&0 z5CZMwG`EW>H9?2fhO0u}b_ZN4y=jh}7cuA~3y`n5EtN_zTOLc!*X!>HJvS^fiNv?1 zOuA87bgigF%Va^sy)tsCM(-@Pw|T&qj|Ltx@j;dr+n+8Pz|)-rL4Trj<>D3~oXCf$ z%Qhig9Z2Tgd15`LPF?GF-g2?Br!v&AnAM(OY>Kb$4U1d{0GX9U`#+ys9s-mZO)F$uX;Cl+3A~F zzw=T)2K~lC&5H|;NS`2bXk}A1(Cl1V9pkVTNE3VnjwPkH?L143snDO- zUaI+!6>UBxg9gcjzP6hQt&Pr<-3vcS`{{b35u=1FIFlA-dpi#o`Z4J986_S=YDfAM zC!qwg{JxdjA8}hq=29pPHKN28CViy8@rpvw7PQ)l5FJ?9506(RYi3QoR^q_gKEkM! zNv5}82Yd1AL;ZqL_w~)HzeO+ENz&u+g~1Y2wWIP_+Mk-F;x_v1S^x15eBF$BeAm}q zuzg!JS}rNG>A(i<8~x_66ii*{=;w`gG|Rg=MMvf)Mj-I}@#B@j32x~jsD8Qh=}WNR z6`Sk}{17EX6>ooBN@XQckDjUYuw9YahnIjc+iK+$T?}!^R{LVYde9TGEsYFx7)jy?>*waApkvAZaRKtTqf=|d!NwI1{?nk~m=^n@a> ztv@sC=Z<|jMQy8~-Cd8N8jlxJ2W5Q*)T>QuZyBmK?W~pgMJ{Z4(gJL_*C|I5xd5w+>5Ec=3w*{nbmg|(_%WKcG7d6 z)mk;eETn#QAYYfTM#)No90LA`&9RV6KNcM@>dK8aGn3PgAm!8<$!Yn>jK-IN@=f<>q3AVfkx9RFv#ORXDlHjAT=)x_?~jhN z^M9Bd*IO-curi1UIzziT1e8l2>n|B|M#@PM^jO(FY@6&1N69lB(a3t`EeV(tsL6nJ z!M8rT-RR-X#DeJ+*TR(+9A)I|zW{lm@&cU-*2y%>vfYTm?3Nfka`)*^Q? z4&v{n8#3Ae_pI$!auBM5HyJ~`RDOf@#dbMZRnB(*RI+^SZle_E_yKdpky=s3znKYX z@@vahYG+59cIg9r9}{~*Gi08$tsm%4Z$n#a&7V!BJNW-fXP1xgeVqbw5k*PN33mnR zSZ;qQnuvmeSt`1 zsxpJ?&44s;&`exwY$;0l+nS?o!H2W~&FZr|vS-<^Pe0U^jIEWka;uD0u0=45dYPDFqsS31{ zuKstipP#QfY7isAw2NIF%kO=baJ1yBWGC34(DpCsQvkyX;pV3%y}N*Qn*Dp6Ya%Gf zPv3UakYE~i-}Q?gIrXX!V)KK>AlofZ2qf0=J(_SIm>qgxY4#isu_CxG@wctpGB zGwyde%j#yP(wEY9G8r`7lsorw3tDrL^BmjQ;w&(x)T0^y3??dr_Y-13=xj3kZOC>+ z9mj$rgQ5q zotNEl0V!;NtjPtKxmeDde#GUo)!|V+Io_k}7BX$XKN}11vU=uYbgSmVRbO%dq#MW3 z%Zw(D8blgyJqQQi<`&j>29}KfAm9Rzp|egv>)A}(LKjn$P#f)rPRr}6=_J$PkDZ+E z6ZZg*avo(|yobbVt# zT7RkLDHLfd)0Ysu)T^LtOePL}&4((KY0Z>hANu3mO`tzX@!S}uddLop%DMt%7dtl? z?vN?f0k*uolpJwJx`(ZyaJ=6-bg-xN!sEgG*LSQ?OnL^lHyiJlr6gYqcfC2 zTXT8w-6iQ4=mU7n^!YDuV@w*WaQ{0XVQuumfvZTlw%D$-LM_9tLJE#l$dtxOh))8{ zZxgItg!Z!-&r1Wa=L-rSS4w+*2_cOz-LQCKKqF;=)&X*cSaDNiR}it*)sH5L*;!Tm zOxz)R7o+a!oNx+U3whEr5O5uKJhX2xaF{B-hkd;gkMn}Fn@|#=Q=GLq8hjv#cU$dJ?* z&$C;|nOdEjB%lC@jKR?3*{yUYp{#>}*w6E>Qk=)9`daE{*{zUi*d$MaY1%I7SDW-b znm#)x@V?P${GX-fQTnF;korE707qbV4SM3(@r{?7?a!Cib$}PmzEakMsiCs*0e|4r zaQMZ7tbP{RU-`@q9f61L@v~2NE&mj8Tx8mm*Nc9^+7h2vbOYLJ(DL=5PiQ;8Ns1YD{h}{78H-k@ zcvJtcyu<^I)3s}t6SW`P4Vgv1$EvqqA8=dY6JmofVn`j?kXK9geYFRtaTSi0GVF`AG&IqS`0r*vi!z%*g!WP>yttWun|i<^N1W z%iFvpO|{Z%N@`XQ+3g!ksIQP4bJI7^`VZ>~8E1_!^IB&F=OqUZ(6BbmtO;*EmQ{ZT zFQ-xDJ2!ObMZXQf`7i5Z7mmEhToLq{g$6hDDvj-C^C^ha>11Wm1F<+E zWe=%Z{IBiaU4nDuZEkx1L6o;#4vgw~Ij zYiS9ov_Kh*kl&CUi{*|Y{Xw|OH14f&qwDk)*v$iPp8nPZ_^o5VV=Y~LBXu|LFtCAt zssC7yk=D^J`tHQd4nAe-Tr0Q3bw}`Tt7UKn^=iovg$gOiO4SJg`p6vcaTbN6qtvAt|3~aIxp0`5q=*1wC?l zQ-RjNUa2Qcs!CGZ41bvP&6aQTrflQ~_Kr;Nryf#&aHO+>{;1P*sb=E{7NWOEb*$-D zMd%_L7Pnxu2C^ET%eTTf2|5R*+2 zWU8}RZH?Q_-a+>4@}2lP&ZjR>e$!12d28g>$^*x?y-E(KVE4CS??kE z@DG{YGK#f8Eg8}!(zS%U94b>SK!Bi#w(0lMN80uC{BJwj$!f};%L7nr0G_fQ8mRW9 zA{j!m90O>w8?4hn9mcx*m?&F9`b)Z7JELB#ga?Of@Q1Wwq5ly!SX-m*I@+Oe9IN0uokZj61?NM5RSy6IGj>~$ zy)AL~?zwd?G~pItA>YQx*Z#8l&oqidVK0^fZpvwI!;9ZT^BzRu~Uy?&W+?siqIwEgfUap~jWno1_&LmFAxMO(F*h*baD z?MhZe+hoRFO^6q88hu6jkd}DmQFL?Oo5R>f{O(wdbpQ!L3L5Tee!l4y=HRVIUL#=T z=%zw7<$b@PaBMcpG3J;H>nwDBhF0 zotE=f0t27Oww$2ZL#xmC;;9Abmy*zEJL1~}+bjE{(}{<$J<5u=KxB3s)}4?3;J#cM zi`11FMaM=pqhG3WFtgwm{V0l`GH}+P7|ZE^;`3O5(r2uu^eUSL8~uV_c#yA^RZbx4 z>hPLlZAM=v>;NE6TG3U|3d?{5_;|k`Tb~=<_E1Ef3xmw?vdCe2i-yu)VNCF1vGO@eo`V;B@T5Wla~RvIvQ+;@suv*9b-=`x+%s zUOV`y2O-Ct6j;4w@f8(Ebp108qI?0p)c+hBgO0#Sj@&g&(-s_mu2w>V9D=^x4&(Cz zrC|ap+jT4ZW7|(tUUKjxOEKt#o%@Xw707DpxS1XC*VAuP7a#E5l+Ud{`+|NPITxD3 z?_#-R0z7G8JoR4#a$pUToK0~k48?tM9hRxdy3q<}(E|6Mo36kL?uj;c=J z_gQ{zlak)my_I8!*KG!6Wz=OCt{s=^zeE2)(2^k9c*3#m$e9(07hY-qQfUf+ zg}jV`^_VSn@Fr2Ud%}$pmKulIL=qsMp zj>!Npj-6mc#gL=~J+dw=E^;Px_mSAg^0?d!=^UuC)xG$SS$46WMZd|>ot9nbMQa$c7{{#e{VT<$xO{bu!Hc9)auiPcFDP2E-wIREyD70Ebs2N`Kt^u084*{ zYDu`O>-yml$MPu>JiYbb^_W)XtFi)@D*5stwGOpHcR{mML2NPyKxg!ut5>Ujijm~O zo~~VP)ZB4lrW_n;%Wjl^b$u7KqmV^BmY?{G zQBUuEcS)NbHUE**JMv>@C8|OjfEtw~04zfniVH3F$8I2bE)hT8qnSnu=P+>8sa&M8 z{65CDeu;4%ncS{ob!mvMk+&hkPz|u4v&)0%ndF#>DYOqcC>NeC?WM%nD-BmienoM5r$ zF`{iaggS}PJ#G!m=xEGE1sq%U%3tv$J37$+B_V;G57Wgs=>G{!`QcNA#Se8i8p9PT z)AqgYt#T1?;ddqj{_KiDU!3$zVtw#Ur?Qucy*T();T^$mAP9LE8eahoaY69x49d;8 zwb10b`61FnXXoj6@kzSM>5AOW;}n^7no~{j6`z-o1BOo3`_Qtx-3*-z?&Oo%LY;(ggF~V)H>mCw<_hlThH_ zt3SKw`OazAxHh}$JEl#VCM<(avd{jw-M=lTQ*<8Fro! z1>MAjMo+{RKROU0Ap>;t1FSe3Pk^i4#M}h$N$EE5HbTZvSNuVF8Zc|lBjT!fCue)_ zZ=843K1`IC6V5FP54CA@^FgH0XWmF1K)V`7;CoZf9 zETM)iMB!i#u!YGHn#h}J?3Gg`hAt#SwtCkG*vmn}2qeX*V`+hGFQ$jK>!)SbW%B!V zHrE)34c`@yU}`7uEa{tmn8<4dqn&n|$Y@30iFWnp4+@bOc=w(Kt}U zC`Xb^!P_k{cGA;*l)itz1!P}barmYD#Q;}wFNYGfIc82fSsdoZhlJ=CwgoX1>kN z*uMH1SU|JQ-dcs(HNd^u&a*ViI0lW=b(7)!8V~~VrR}GziB4+yV_(tbSQf2~=}BvL z{RfD!DKIwio31&UWp*eqqUA%a2LN5Y%e=S&*JS{+q_YC=j$Rn(2Om}}|C77SlK9E? zd+sMV>iV5!)XO(#zLez^+gl-XN!znmVb&6OhM0yxpw=fNIFvM(+%<=EQ`rzqp}4OwrJ)urjRYYV1J9B^h|Yr_tCUuC=ty_9wdac zvO-XSEkRN&xvorB&UGHsJcAsFSogz!%Z~k?gQgL{4yw4VrKnU29*g?@_0khqyWCYT z_PuPYahE{hI&t!;}QV zawjH<4mve!vsQECUAj^zkc^{8kJK5D0XRg}cYyVt#fw~b@iFx^O{$RqLbCyYzLyMd zHz$B<^?jS?k5|_nRhqclE3*59%TH)`xF6 zZvJ=Vee=Q5=VjDyESfi)9XyU(M{mW>$cBI44Wy||8>x7At@Dy=2s7{tnSzmZ9`hce zu)86_BGkJ%zG@78D`zn981+BDq?It48+k@jmD0Hz(lDAZ0SNFOsfztU|5pH_M!;eh z&;IQ!_yj0IgE8d?!O-%f;At9dfcTqIe?xmyu!BN0#kvBbWbM*%1F%nkQ`-zh8Gyr? zJ=KnDp;It^PgOZrw6pI`D6uoKI7|VyU0~jQ)-Faf#BO+)X{o2{8yUK#8-e z8++z;TnYN9Ks6zOQFsk9D&vNuJN0U~oHJ@|JgoPVoSo#L(Gned0w|C2`hoT=R~?F@ zXB+p@=G4S)opP*h2VJ^%A*GVJdIE;+diN;O<5oZ$M=?^8amvn&GHC~M(R8cK_%yBA zou{Y-9TxPH;H(}_&F>z4H;$$yyTVbz5T-cV2pjsJz|wa*W_0)%zwGFksV|^c^#~ z8*!o)4%vcjWKyc;t?-I5IR#lU1?JY1rOJIx3wIU!?z*|IwVUpsw^_?Ke6o1cyTw$| z$(re>K*%^GYkrN#v)DQ5PzRS^@z!soPMhdblE4lm;4XqP>M`ci^zVRpN3ni}9i4gW z!ek007AJ@Hv%g;c?G^g@iCW=4+S2ml2R6F z{T#*>j)d9R{6jRv@)-oZ9fXQuDT4=PrfPnZZ=|eM{)B9Erbt9maH`uYH?hj)Bik z7yIb0ciBd(L@QW}A#2$sMBNa?VvdyO!dNNyKkFD0?J)E){Z-Nn8zu@q14!MA|K)$Q za)G9_|C}c8>R%28IvIhtH(I~2(}9+l3(+bkV=p`7>;#_24 zLF6OL<54N%B6zKi*)c%KtVjL+5FGf2QWxVsg-R826S(m?dACCr;#^T!O5x4b2=KRn zmAtdrDaEN4&8@rM)85`j<@KUq>DIbryl|vsa(BE^Av5nB;4eDpqagNEln^`TK6wgZ z?Utb3aD+_D)=rI0o->UV2)?pif>7{|Ipc(126~fOG1wokY0$rD6PJ=Q_Lur`?ql9x zdS*?6gu(u41UIYZIny+$$Tj%AIMtJ$)h{19y8LL4BeS=#p$qCH$RLe~e*C250{Z6L z^unogNA^!I>ayD zZ$T6Vfqtgzk7Pr3Q__|}|I-*uzu--9nS~DeLU2=)Cc4?aqANEUGtX&0!u7% z-?-#QyJ+8wYuSC0T@%Qp4KN4NF{5Mu6MD>!0Q5n_3ab zr0`c3o$rTVS=;mU+oX{bp_&xZS2b=~S3aNwuiXT5t!bEKYx@pQjkWJPjs&c`W(NoW zGdPkVwTY)}bf;zK>u#{?Kx8Xd@NmfVOxnAgIaiDpPw2EhM0z%&lWvql3Khx&{WYxn zxa_IkL)}U1W*=JMv+xhLgSlVMjA$A{cRXZz;XCDU;ijf#IJ$@NL~f~zsS?-?Da?S_ zYXuRMlMWWr+naZ5aaO#rRxnyn&d$U@nVD?!tG+BJ%Mr=+wVe;oG5s1k8V$&%JCC?o zcajc9m#B+;;daerG0?J@4~ZV-VP5z0pv``~)Sh30kvPyUy{a~^5jbO9ap|+uR(bbU zNA+(bWeUg8`khERfCykM%J#CWjyGhjMg%85*SY^bVc<27v?5GjL~ut>D$iZ=979<7 z!oS_)YqVw5lr^%&!DFY+GWb{m4j&@?Z+_oI<&4{l%ccm>HP?-EN(pDwbKow^`=|0t zc>vZy|5Glk%i(7KkCb6DU}tukXKsX_3tfD=2-v0*aLAq z#yS58an0#oX%S4qt_|Et9?;M+HhE#3ZaW*~~{aHSkF8#AJoroR3gdOq8hFVU+ zjnMt(+5)bV9{H~GQ-{47ZWmP!?tn0*RrUF|1+sr1+2ejpWfiWHS}=#>&HtQZu?6@9 z#1+en!zH)-?uA<&aiQ2r%SAX>fcLG|0xp62wu}^=6B7zNvf^8A#B;X;)LvrCH3)(3 z6b_ol;OZ+Fgpb(8b=XJ=KH%8K8Xd2zWq~bLuynHVUQ6uY%bu>vNmDPTEDtcZjn#HL z;5+rkYeZN)as@hA>u@U!sH9B;X*ApPSo9$x9;O69Tx_*v22^oF`G*tRr;eG|%8J~@ zggT~f^C{Y>hNWPc;0k~rv*{mKwS9fySNMC)5r#W5%sjdk3V=Z8kFPC2X!pd1OuPC8 z)x2>jbo z*n$HN22L@EimSnf4Yy1HtV*6on0n!i^(290IQ0@fWUtM_AS4Mf+iIOm zqS&wSrsi_;Mm%9lW|qNy7yg*t7Q1F_XMht}_1(nS*1fgobk@VG@J*o&+435WD^6{% zeU#HsCB7+1-1@N7RWnWjBj}MTQNnhZ_dG+6v}T~5Pk!Er>&JN)SB zRqFF_DR)3<*#X9)(PO~docLsTW>d`u2PLa%_jq1+{Xc=3%a{RbGJpx{Ho=S=&z~4XAA7M+|k#4r8CUhrYJq&0Ur{a3-EDeAQogvPlZ70QT{e7E1sjRc~UGQ~d{7%3vql4#$nA+$MFg zfkMv<;&>hL@NqOGplTpc2?47txX-N$OqHMb17B8(tGY0Pg%y#+dR_~A=y{IH_aJ#O z8l_Pw7gnGVz9B2?mVF62bUrwXse&2jAULYg9ItpP3ESlLTTpK`l;$$w0ihp0>T289 zkiR(4K9xTy>?shx@qR78jJpN;hve0yj$i@b)4r-f?QIfIKwlt3L0TY{#ipLl25k8+XUQ?ZiPQ z4%y)kXRUKXgLqu<=!SMJkl8JBwJDO_419UFSzbTl{9Sl&MWoTQVJ8JrI$`v~cV1d~ zG{*r)8q|q0>R0ES#1V=EW@lmO%}eTE?f#GEuQjK?@)fNKX0<8BC<@;)_Q3<#JB zI@8*vU}koJ4%yMrIpAI+GS@EWArE2!n$wP=ldeRm|IRj|tTm>7c@f_Fwe!VH^r(As z8ep~?l(^~#neraw9-Wb+-(HqoRG*HzB{sv#G-K|a)ON+81pixh*ULbmzF+Ljq|^-o zQmv2=oOJRsin1xfV-p4d(TQUYl7{(Ef(*yw=x@}G|?|43#sQe|hh_U0S z_hYZGz6S*`|9#%_BkF;}D6P-&t{N*qYXS2NRRxmmN$$g?{X7GwM$n#gV7~|ZOFf$z z+=EZK>DkHRGwBAU8URh@`aTsgjg;K<4|;DlgPYBVb#leJ-^ix?;`u47V^aJsOhvS} zu_YF&toNIsj;sQB71i_)M_w%*fEkYaWuXSbC`#E11O!P&&fH6~LG>R>?$x(o*BpEL zODp~XsPOgY2b=F>w=DsuO2XVxINM1WvvKQWfIr^vgLb}w+!PacCb~dyL&%J*~Srr=g(Q=aKFF z$A^R9%>j7)>?mNRqrl@U@iO`KwE9p=N7QT0R=0=plAX{%*9CmoGR7XAH%q7KVf6%1E93P7CCG| z4@GbtkKy^=y4f`H{bju@f-)I$Ha}~6?G`eZ+w^}8)8sdD93}0)|Ne|%C&sfX?mX_I zEc#)MRL58l8q{18OmP7Arz?u`=v!zD7|~DR>ga>^e*JvI`|+w~U(Bwuy_bnX-U1s| zeo9U(KM->}4U*-#sA55dq$NRAYvB%Sp{ANZN&A-wyI=J8kQA8be@J$JwJcce-G zV1}bgvArZ`Hc&*Obusrj#3&zUOe9xCl50ljv1)pKU&r{~bNO0-KEaE)Nm4xeD6tND z3>XPk1J*+2v{@7@H|xPvPIUAChE0s+xkBS%BygR}gH0azs}Q|QJK<%0+e7G2*P6yu zF&BN@Y@5`7pcQtbZy4D};ri|x!I6NU={)}YN-(a*U?^Z#Q$3nCW;&a)$MT@laN5li zg_W!(A8N2eBHOt=A2E0IqT5mFF}J%bGX@)k%rHQU0NtuUCd6`$UtonLHad$bt0WeyC@g?0s`3n(lHcGLdtdb)`?W z;Xc0Se>n43KDlU$_iU^5J>M-@t@0i)ZZ-S@P`%pYnTmw{J*x%BGBWri6L~_*jDhgv z)g4>Kc^WY@T&~ActOrCBuwX@e4yyo>DPXZYg5#RK+Q?xFgx>{(cKy$wA@n!Ko3?uZ ztu>DTQ`r$dss9+bI3b%?9Au9&6mYT@2a5@PH(Q>OlIw z)Vq{Uq?E#}5^4yt&FZz<>f_d!b4;v0X2aa1i74$a@G?a^IA`wEe{YZO&%3%Cof~ z5i&HabGOG#&ZMe%J(Jk{>>KlpBjSkez;Z(Wft!%L4eqSVyt!+ZANL$u{CoZA1mA@$D8Op;gi%hg z*>h&|6#puSpBbzZos%KI1uPY*v!Im4&OF+;sXS`P%!;Dx!(=q^Eg5!{q zz^+G@PHPbx-)pK6I7Vjuje=SZ=bZ5YQ`8iC8D_!CkwKzEb}lrFn)T2oc;?v(P9@MT zFq!k9SzRhT&i*ch&KU^P-5}y85vqu3`RQ^QN!bkR!ma_1WLmZ{+i@<+L1@B}hO;CS zbbLP#3%M`KE6Io311N zP(RM)4~c_#=(pd$h338f*0pVhd9+KrRy)NI;F$H92r^>=DLV<*XOX16nT3EJqm^^+ zfh_qtWsYiy)gCa})!r3@X>!cE4xB03;QRFbPwCur zGK${-@V9!Pn*Lv8J$LffoQX~V{Z!(%Ttr(!P>@<(5M(;$J5B)Fqzpq3-g#N)8a&El?qSZST-9YO|gWtOd z0T4Lo9Hwg03EKtn2IzbMoVM%&>>kH|C_T|8ecuVdNAmLVDK}9&6<W4vc7=4l<8EqzMM{eOwmPW%r4qw4?xWKKw|3K1jd>DzkNp^6lr>H@unLmgH64&ksF`VV zYi=7lsgX!vupqQa?&4{;S8q4|d)yJ(Tz+?72mNSFZ_6ehH_r`A#a+ssC$Cag* zU1Z<|DPe$`k-Hqxjoww#&VP7QceC+!!s083>zR}ds?%mZV8lbLv?L5d62Ia=`b_kG zO?S!Hjh2bic}x4(7Mwme`-*y&&_if0m&l?wjmINc5eg-|Ii`mElGP_+-)I{%mh9{F zz3M;Fx|EGi%ebYBB>{>^^=&H@hJ5}cByDwW1vM*MNo%Ha^KdLC%9Bg^8o;qDC zKw3)c-j)d}^YbIynQ=Dp=N-LS5Z8N;zso=gYZF{;U2Fm?nS=<2LZqsx`E?OY}?L`jHeu@iSMn10fQ*Fll$*RVvYqECFkW__e#SqcuP=A81(^AqeKhx3b{BuIm9 zXz-j|ddDT8@q6cof6 yspGn`h(_7m(8qzq_Iw5^X{<8x*49&avhL>HM*zz+aq3b zos$wFJ3=NtK$bam>Fr-k=bSc;bUbugau9rT-S6*f0D`OrCaPu|K(D)oE&^(p&X?bA zj!b|Jkfd~;B*O9+>ls>~g3gXSjd8Z79VGokUVUgT={Y;yx}_NHSF67$H=>bt;sjIm(90CcJfZLb~!d8;i0^{gG% zE%@@Au5wX$!)yZnOeA}>-JjG>)qgKErv1I!88f?PEmO@+^BS5a1z;~q99i+?{`HE% zOVT!`ng#jwHYYlbNH*K=3_0NUll-CVrj?ThcugRCtUvw7s_M56j$>CnR3Gup<(~fE zE18tRMEU;|3bQ=h?T$bJ2I2jXc&T#gR1|&H?+ATx9ouLjc^r95RZIF1uhh@(i+u5n z=d5b?!>n+QnNDMHiBk8>v=5zwx}xK@ns(N&MqS;*9LmH4sU$z`{V!03yTSnudJ4!PvDZ9=izXNCG<$o|yyLrkBi5 zw6W*(uBrNIS-k?piKy1PuA<5UdOaK#<*2MYj4C|Fka|PDCswpJ*J9A0Bvj=oK7x)z zsUNbeExRNg?Nvm+hJ#SOQX|8n-I?7T6WqJo9-MpoR9dGi4*w->tdAgKqme_rnY?j`EaH4`s#+R&O%%woi0Np%-uUVZ;M9O$bTC{) zKUg}QpJXLH&U#+T#ZE3;;rfc|^S9jr?C2T-gLY)!RR$S* zNI+vD|HFVI&YsN*tqdF;dS*VGNe zFbb=W0k^rt+kfgLiM8Wx3-nn{Q05O8+kV*`D?<=ObQtpt5>B$zWafHD`Z!@I%&9$J zPXibU!!2mK=|MC$)IP+fdnX#6(cMWGdi|k00Z_9RN{+&I|4-JC#I!Bb>GOmLjwqE& z>Gm)&567s%ZjpASA9@rjead=Up>DV>2;)Uy1>`1v@lEe1PY9SHN#(keGxR?xGN1tu zlu-t89?Vi9Itk4xAbx2tNaYIuv`MTVGH7r2{g{!NB4Fxdd)-Tba0?7>0_?Z)$)765 zq5h}qS|_tIT|h={AN8FdM^EAq`h@Ju*dmIgq$nO4EU6?rir_q&I!LszEPb@yvJ|*{ z4X`0#csFbhYd5E59+KgLAaJ`r(m;!`lD0Jj1U7J1%s5zg;sDb%ZaB<(y_ri(r2}`lX*VyHXXDNERJ0)EMDy83a!#ht+o26UyUn^VmE32;snyi9iN0fnC^1=^p$AB;@nfOI3z6j||W54594=(Tb>;a=$p~}V*0g^xJ^-KEkNBwsbi&Q+WrB9uB!OW*W z3D|+2Ace$PY>8GH`fX4v8O5XAL5#F^Q7n_efw-XB{@UK(BZW0i5ELEB8zKt|6sZF_ zf^|Ybq&XyjHt2sPT3`%GClk7T@USTv=qj_tWN(2v`~CdU@-_pKAUu?TG%~Yyy3PkA>SjhhmxyK$f5ZHZV>H!f2m?1G2Z4 zN5eQjr6YYQT}9R@!rQ`72Hdu61kdHOE?3}U;7{_j_n39<>^vTU)kTg~Udn>We=faX z&aBHjtB+AXk7?M2=z1t?dF6kyd!mg2yaLZr7`M-l{>NRL8D=*@bScu`e!u}m?FyuU zbh4p9=&-0Odlr3Xq>_Pnog$3$qPUc}zdqLzJV81#SZVrSS!WFdIP6Ro%=%W2_@MvG zCaf-jzdfI+pu&?sT@~{qGfS7wxRs9e^Lms=uY-h?>iFGwtzo~q>YaW?V&6hTC zh;m%1ILkvXwY!&e_2}dxYE;JTru1K3=Lv)shRvx+(5L#3EUt@>6-gG(TOh;>l)a8& zWqJ6%f+EM0=Yu}%)~~)_{!Ff{z(^yE8}o3PhF-iXxkHMGPrBAWrvZO*igF z@~MuWeqWSh11T{l+V(!%ck!CpUPW-r$R7HIK+hhjcpBZ^oX3fXT8#W2;vyPg3-uWQ zAF|z6QvQ~?s3Rt2W)Z-+Pq)eeMYM-t{bF@0J7DFoyq)RYsB?=^AOip%28FSv-nd|I zSKFa{VO*hGr3Niuq}2`}_(@*scb}7@<+Lk8W14;iI}>2(_X|i-ncVIx=*iDpy{-H# zyux-F^ccD|Mz{l?3n~ z7v1^Rs^B~i`}oRT%GIW;>%md?fTZa@&d4VnuiwAl&FpJ6{py2b!HWtzZnk z4*;vL@h9G^AawDPTl~a>v}U= z&YBTrk|ATr8k=nPqEF%qujFklo6CfZuZ|tX-=PQx6fEnIx;@zb$b$Vs{ zY02hlIoIoxT|La$R=3qT1P4bMD!sRFuCl?COq_Y1K?Lbc4KAH7BjwfsaM!)qc&ksH z8y~Y*yS;*2Ql9cZ^6mw~eVo$p7JJC^65fxh!~VwW6?`GiiZFoZmaKq!T7nQCC4QhM zeUWg;JHp^?w@^1dYJR6I1$IMfs$dH;sbbArCTx_H)Runb9@LhIK;` zB9pD(D6--_o%2+N#%nSn+ENFFdSxln0XeG#_)e2#Ge9tu%k`~sFWTQa19ayHI=E?V z#hxhp;d^{hx6zih(ehI!?n$rr@?EbJUI*@@sv~{x$j#OosdWFWjD89N6Re_<2027_ z)=RdcF|C0(>L%U1mv%11-<^VYr=uXtDTnlR>D0Q=H#&W?0|VcVfGj7|M1?$cyeNIS zN{7=j$nhQZ(=&kn8tB~1<04~^^)L7Ox1lTqD&9ciY7&FS^A+2d{l1^-Khc`s=BlgB z=Q4z!@xNa=+vSwNoV8vRJn%x^MW)fH`2c$`zkh50}boLeH(b{n3TDz1b#r>UFrOUn6AM%m)qaJSo$ z;G+T38>k;hoj|qoM|!eL0E&cI6zz zl}FHzOIZt?Tu^z5@x%DBFjn?4#pLKDJ)eEBwGOrTFq$xun*+ffa`vm4C^;s)R~5pWP%rHiOwP83#fSLkydLC5J?DUCxZh0(cY&|zl7VML#V zQqB#cbBoi#jS|Q*bs#DSu5~Wg^^W^K$0+wRofx3J+3@_Y?H-68pikHS-ODi9rO)=u z=sdOzKgphT{8aaJIc(5j2LXn=j!sx+DG~HSX(n%?u=UIb<}*Uj$_Qwe>?Ei`0E0BE z)@3kaZE3J>tG^fJSOv_)4Vc4ebRg3lUCoKjNh&?G5$w227I5wO1Zk)$Qx!~Cs?J}_ zPULBw?0mIy(IvNC#;Tgz1a3F^@^AX3Xn0jHH53rQGhw2_zZK2i1;dM-7PV7QG>G({2 zhj;xi0QO$cJQ57K>7%pmw&{HwR+FLtehAcLr0)uzGc8FyoG#Jdxe7zZp7i5e8_K$x z7_(=2vM=m1?a%4XDFOFL>0X|RN0W$g_iuS^-1uDBQJW6U#m*q0HJm)n_N^y%`0$8zZhU9LZ9J{!%P={GUw$Z zMJE$7q8 zR_{dTo9tU0%et{ZhBZcjV_)d9D~>pb$21-$VMKaJ?xDFD-hA*5!AkU%VwTuT)l1}? z3AXKPIV(%ylC_eZ3Ad<+SB3owUMN2>)n?*6n5hYzYo{{ARP*&8vr=9<8kvcWZrh`u z_dgA@ji;6&-K$w~p|Uy*FEgdCHfrzGx3Xctr{U8dH>cs{n=@}M z1mQuw@oMK8pjI1jp4nNi@?ApKKc(8L{}KIJteV<)zo`kS|H&uk)p(4+=Hw;`7w;M> zJ3l!$Ezmo0ez|jRiW9K7cD7T&M{?xx1pBrbVpC6KAQ?A2y{SFSuttBqpuRiIx zt7#`bWR$ypxCEx}C8q2(gBtC3Hk`v?f3%31@JSl_;*yd+9${3bmbY+duaox$$VLX4 zlopz|I{r~ChafZt_OiQ2TNq@Ji2)e;sCkUq;aQp8oV8FX!jhuR((gAb;Mvh$IJ61o zZ~C#>-XjLW3f8EO!1+Ks?5;O^{R~_q9)tZ``==|!{;+M1!B0Hfp^s*nz0uxutbW&o zCMeTg3T@@EacK=xhW}RfLYH+S1r1tXx;r3SEj!CgmfG>f&^|1UcYe!0W9(+TGXY@f z-@MswB_G58r{2XlS8F0KnXD2;Fa0N%?;Dw75& zfZ74{_>so_io@@3727`5U7Ffy--z5CR*bgk_;;KU{d?<|2Gc8;fRV@Ml^X=nE6^N{ zXhqrybU5AWd^|s4cm#a)Jgsh-7x;3K?+Qp3(TbW40$uNB*ReuoG^-{m?rrZUvo=YDQ(NJlc8WA?+uSJ%IfUSj22+);;Kn_KC_t%ycLro;TXfS-F0zaX;;3 z?5?WohdRh7eWGZ5QGX3#8gsT!F|~su4P)RS55FnZ3_=pf8zK(qhFRMLr2ZBAInj~; zFy4Q|7uf-c;;RQaYK*~V#^W|5kC~_hX`%Y>ZC)Z;AmjQy?X6ev(jASrt^8^R-@C@q z=7joh<9d>VtY?YrB_-#p5UUS2r2w{gz!M93!moq~*OSFPT~ZusFym$Ykj?P(69 zS7-oLEfaPRO&N^?t-wxPY{zMh>-$2I$=h=q$-O%1);rJ;~HJlf7r~$XX(Fd{|P3Wz5i-$|D@az z5Eci;+rI&AdV`$qd+;&a$4Al5&Q0nV;PoLfrSP+V&H>pq~W*n|Ktg_cgf>h zh<<)(zr6)akyuAL;v*o<*VZh|ue5-O&@}a%A2^Qd(PiwFO<=O4_2AQ1N2(U_+0_5q zq0hi0{Gk74Wg85MxDXcyRWsvc>s0($%`^?@^2Kdx`}K4WWzDlhIfRP?`c{D3B0eaG zec;cJeU6e7xb$Z6Qb~9E+m#tGJ1BLH2gWn)-hu@L`pzAI1r%T^=z!!Hg*p`Oi0n>g z6_-*n`x_!O=G(*HP|WSP)AARv?VHo+j$v3ZR{_?-Aq&?XxpEfEC?1ayI2}yx9#TI-GpU_vacu5gkHlosVVM~N zkyXcpwoYI=vN9tTI5@!$AA}YC7bnSyi#mF>f|3${NI2Nca;u=jV49HqZB8Q)a3GJ8 zL66Tls(Jnlgt&@_d!OV$``Oz@YlB5-7IOw27uwa{j=Y!u3K*ZA_c(KZ8vm^(=!>+G z#}X%~Xu#Pzyn2EN!!8ddqkuigIgMRLwx21=hm{pVfkzk`-c2+fVdt<~w1h=g+H#WTjGb^>~d z{rUULi?sDWd#2+Xjr#Oi9;3cGCLaylHpS$exU?ZD$m#vq%6lDO%=Xxb9=-lrx1eXT zR#`*tVu*1TPI!hEQqS=$C%2^^MWI~BRhiQ{%So&N+whs*CkLM&Up8 zSE?CtMTQZM!re z%5j{WL+A1AJYetyAbfP5^Zrz$qAhcG(5p3+mU-FdT4fBFARUJ^bNy0BQMf};>(4h| z)vh6GJD>^!3%gJ1a3{jID~?p%VRyc3f!dcgoubUaYnGj`l`a z{YU>^&%~{EBM8seHm@0?3f(gGc?l$E@s)aP-QTGgP1_kI!)Y13gaQnPP>Q2ihdmWna zUbl3$WCT9Im!=gFsu&=jm6M|W2lPM5{N(tI;y8q<5BBNuY9ti80H8QT`1k87Wbs_& zl4T(82j%b^IUk8n6Xl9dpe*kyZ@=}^%o@NFr*=@i*1im@OHl}~0SIHUnJhROZ%$(I z@v_Q{y^6PL+Z=;_mU0e*DqHp`#=d1^Bn#|$1jY;2ShZD6M$`2NePn0G3Ff0_&W%rh z!HOzzJ{1&BmYjKVRxf!mt(f z2>4DwbksZD_oh&Trk2SuqFKg9zIUj=Jsl8%N^nNs4T_P}t7a@>NR3qxys8wii}fr> z=if}7UsANi*2UVwE4ta3r6m9g7_?nFVg&5#UOSo=IS2SIlUF+_B4KX=(Stx#A4Trx z@0gwBm&cxw&BzlO4deb*O^`R6%+b%p7;7T2ZjjU(+ z0>8H&a0KrXv6cJmT0V?WhD$8=pINxafPFc|X*(#2l7#u)2necLdSvzLmb1y=Btq_jB|CeS0Fy12(njczCyoMxNBvKBXc}ue!{{h$F9YT4 z1Pu7yPuE1Ul(!{NC!O|(2(5LnFW{QRO_=2F1X52*aJql3FHtQoKW`UKz;$z6TSOf) z+4f*Grj&gc#LWqxE@WUZ$+CY{Rfx!6+zlv|ccDWLxFD~}I4yZ|2Y|_Mee*-WU4edX zi+3Q;dvFDV2eE$Vb|;K)9>=L< z#cmS&b<%?;-N-pA0JPN!jfT#Bip-TrRMwk%a>y3Fr|D3B5--sGUlLJWV@a1u~8>;N0Keq4hu@;|xtYTw$K}X+r%QjP1qz&7ukkax zAfpo+HF~SW6PWd0ufE-4RoU@5UN=AChkK38NV1-2fX?Zj9q*<0XX<+17MrYe+&9|# zo$?FAI_!C2sd(fu%pUaJhokfJ_eDrk^2^c(cb7S&+U_Esu06fwLU4__b|vNSHn?9e zG;v0*qiz}IP`?mXI~Gw`EOnC;EM_Bj@iZ_``Y89uWD@k&H~lxBoUvtVhWju6R*)Cg z^`9!0ZR+oUl+zgtH$`E;Xid!Rf*FL|1E{cz!+MC2{jg(m%4SW$UQT^EkEhJUiTAdu zhu^(JS)or(RnO6}>H+{ET~PwK&0XfxOdfU}0+w&ENt+Oy1IPJp3ks=ZOWRI{%NgK6 zHmRJRCFldt@}!4IJLwzxgBuaUCLhk(K3pZnK;AY-)160`k7NB=(s-PX>C#TY zk2sR#dF+CCIS%Xwre3`3GOK*(%GJmk<+=3?J&1Aag-(j+$=j-tAN*TEhx`TIHJ*1> zO#qnq2lQc3=#;TMHpT}7u~yJI#Ptfk-`VG62r>Ag^RDOx*x$7oMBS1*Q}*JNadqUj9&DBQfw8qi!51vi8vBm~@54iPmm!DAV1K4Eo0l(ic1D*FQAl1d+T4*x!FOSSK^|y!GYwArL;t< zZ?wJcPKU?+Ji$DAN}*qVA(IJqyd+Q%+VNV+V4>gj->mIC+8Tp#9ue4tVyorRR1aPK z(c%O?Z%P@1I4st?LOlaQ!S=CmC1kr`(%u=hQ-yK_GH`|mGKWhPZeAj|M|#7N-TU$l zFx?cl@gB)TSbtAOk+o=ZYBVB8`s6_kECP=feM6d1xD2CJ##4|A3~q~r-=Ik(24Gw= zvx7CC)3A-TRVbhrn}H{Oa|&b=Rj)OzsM{GB1(Y6&J+4S{LNa|&=_baz6a}wL4T46fJ$PU5hZqR&I0>(Ek#d@Z&r|p~rJX3Fn4>4u$RS&l(qfu_M5>xq^z6@_MSt6U$llg;p4T_*>K_FV4f-Oo~v_W(KQygT7g$SI@q^D`e%elh4`P?D=pd>3EXz541J4)Kw; z#ZK2R$poP#nX;&WJ``q|Rbo1R^6v+vt@7qf0Wxa0qn_vZHSDj-*m~{gWx&{lF`$vf zGC$R$A<{@B16@rANW%^f;X`y>9G;_FTe})`P~}|N(hp+@u7sS;l?+@4dsbd*)pC}b zeT{*hS5+?WHsD+E)2Dyl5JeG&zheA)jm++(IU=;M^N73cM;U^q(m^xYq+-fBXW8|QUbP;&X6m>POVedzl$UIDw?zXo)_qI7 zy7xZD<(GR${M04G;^I4$_g)so_XxTm@3(+t>eETPBKxpO9|s|^8bXdk-A|O zl4to_wtkaP4VyGOoA{<@cvg~gOq1Zfpnb)fI)@0OzcdqO*Lf^~@pm12v@{&*oeug> zovI+jYrMQ6cB~S7LI0QYg|TK6=zC5A-|8Ax$#f48mbYMu@zS|^6l?Tqwt=2jRSbXJ z=#6U{+=vc}z6d^=@Uc7|x{RI3yMG~={FIVa9U_?%kO~5X2ZKQa)9sRcPop0&l41M9 z-dk2btbm4|%*(oREX5lm#fy2J-P4J8$rKep%XSM zR8T{1b4fS`{3hTt(8+U^7Xx>;WaIMd8rB$&PU2uVL*=adAliW@dz`M)58X*gqjl_W zcNp_`G+mAI_{Zy}*Xs0q(vGtp+=3k`Pg%8^gf)6}&}J~KjsY%*(vN<;>%5rsT@e5n zR+$ZEJ7GWvgK$#9>vCG86iv2Q4=RU|Z>Ix~u>`fE1Gtx9ob;w2QTi_fQ^AXre>knk zPfTv4>_j=-1fq`ni;g8v>8wmwV03!?Z6?0eMk>x#*mwQ;q?8jTu`TEyF8=`B!Y=yJ z*K((ee(kf~%o`@vNiFO#7%;s9tEf9poYNfrC_NjoF(Eo%_NoGi)PJj^yzgGr?37%KZ!z$aK?m_UnOkW>7q7spwD# zsgVZdPQB|OVQeF|Kr8AE5;;kvT-Y3@w-kVq`aTw8$2r}NSjwUPHtV%~WN;78gym+< zS`A7igVImafuR$Rx@G6_BvrFx`Qh?&HaV{SA7nn~P_w+JthYFCk4i-JDOb1Qz3vzn z0|f;02HXGs^sReKo#=qrdo6>_jr!q^X$sf|CkIP}E5KilEe8ri&*0nC-HF#+@|~}7 zmuwaJIjo+5rLf%5NJC>7t1P0!4>5=VSpijN$(g;=q=AtFC=tz8at`fm$9FkPhi9_h zLzYg#_;-Bk2)y5S-)QT-XWII$=5q2kb^TPY(O(hd+qP>$$cj~$0WFhnZgG>9h7eRlT;xy(r+&`tR%K(W=fZ>X~;hg(#(sCd4JQNG80;i_`?V zbs1jhr*!~eHs!#&&sRse`Ts_t+sCI%6HX>=Pc5guX!(^c{Kz(rXF5?{$++%CJXt5F4@6xz%2M_fA2%x+dI)Cc);Ip<0PXRV3$M}@UFg#GX}v7z9HA9 zJBR}th(CZ%$+*NGtTkNuG7n23`k(Xm zGicgLv9>F0x^z1S8Gj%gCdRf9V;T4x9e>ygAHSKs5-_p)+$z%YR7NvDLh27a+l1iZ zYKrFmT-EELAO+oPyF25DEeNUBU23#WcPuz7AIJw8Kz?>jZmjYI-UW+&oX`UA`98+9 zFO`kaTk>tmo^Skns;?*lZXA{sJ=Au|a)@F;1mv9p2O)CmYZ`^@Bda~Gckw$!s1A{J zXBR@BI`nY)wH!g}nDY~V3dX;3Sn29db|OA!m9rn2-f&sa71$O=z*|0`BMDNti= z<$)tT7X2Pu(?@yuJ*oM{HDpW!&jDVvlWC@pbZ3R9>}$mLAkD;oByUgGO%J<{9AvLE zXgAsypAqy4Eh|fXaczgAPC-+?1Y}O%oI?H%(YvbRW&~_hiHPlWxxGOSE1-MJ=gBx% z4$gC0-e=|mLTUZ{yye;Z^k>3(w`YAf7&{|y73 zf|pa-rH{vs=j8%uFEq~0?{W-1xaool#Go|RBWWCx2q(I?%iEDY?x;aeII&UTI`HBW zy@)aW>DTZbf}A*wcM0KXgx}pqJD%=L4*5m~j3rfmaEpN)PDfK?q===nq-=2%a;qEK&i;Fi{9J@XGpy z5rl|fyZ4|7gY*hg(0iW*XBku?<_ttrbJ%6)o_LM%2f(R~Cx;4odDoCNm>S`#gI053 zr>j{kAu_YL`|3sw=tT5ThC!TwIy|Ibns41-%Hjg}IxoK6`=o!77TrE13bah*N&8u% zI}KULPO}rpXbTDIjMjJj94e7yqQo(n7@szv(?NBQ+vfFkkyCnR!-3qbsl*tSmI4tgdoK4jN z8M%Yv0>)To7O+27_9=aYKKG#+P!qr9_#Nu27H`VSI)Re?mU%AyMmvXv9rKa=K#u9( z%6}P&QUAT?m8KPI3{#vj*K6NRYI>w^Gk^9{T@`XE~>hg9DSzFitO7kU%hFq@*{)b5}K0C4$Siq~RB!)2Aq*d*kAxO^Qy(}_HRz2GukzdF zuEeTc`5!;>c&B%8H2585w3i%UuA@G^4d+A#JZhGUjwD+MHfU#cEo^SPixKl~s$y=f z^ScesT*i+o)}59p!2z?>N9o8jYfOlfNxE zPs4Vy^;;S1?mddb+=0-;b#owg0*9x%akmeCtFH?RelIli6YXW;7HA52pq!Y~LmjQ$ zN89Ek`8*Nsma}n*LNh;9&vIz+^Dxtn84*y7g5{}Xd&6yJO7U0*GE`$MR@-x8x?;1d zLD2xN@)Ff$MRMKZ#X!b#9x9*-5pE^+Nmh#6=_kx4kZ4Sw%7xbL7wHcGbmJ#3WexOV z($pBmVW&|5tM0|z|NL-x~J$@Zw)ttx9VN?AOFjx0Go~h46Z_|R=&bR7-KO`^ed&bC9&pOcE ze#Zk%_zJc)tE8qRQjzY{XE{gjMxX=F^=)wY199FG$3`h`XrD1)e-?-JCiK{A?dyI?u9JI zLaQ3YrW8*X9rPbKGqjs!*ZKoo?O@Fb^eAq6fxQWaRS2cO8;>`o+^z}>mLcoMJj9{s znx4N0w)EaYnt_HmAMB)fKi+a+%&DZt-D__dw#kFi?6IkyB5?p7)L-t2ppu`BM>PzS zPgMput+zfeBOKA4$x_3&61|+XF;{X;qu=N2WFrm+J`S?vDl=NK(@{g)3|5XeW?z#} zI~n+7M*5ibwEfey8~$;$W;j*<5G)-!@a@BbuS z9NGTW-%{nhebfrkIRX4b`j=4Vk$^rIo_H4e@6|3u|J!`3ImpckHsxDwE^q)v2e3~575stah6FJ88*t;?YhbJsh){$#PA>X1;1Zk zY4P|o;*WLjby?IZW^5O-y7G{S1=W1d1 zBm^WyA4eWfu{w4+^cEehyF-_32KZtpyxM|v@hAG!{Iz=q?6O0lz|k$Zt2CK3mBTId zY8vF;E=+;a?B93Xp$Xf97qQ8&IKl5Ob!&kE4E?!ZBw>>`^rMJ!6Ze{6Je5_^aBSU*gG`*a?2dQX{t zD&Lqazh%Y#;-!IxPY~y}JC?~Pcu~e-A7G#`A421#e63{MAK=A!R3mq$TlVU$q;w*D zFMG^$<*PaYPTuh1T|kZ4sLk;xXe#}qOj~v8V|cLwn|vLj+CKMYcPpw!cA+3e<9lrf zRwv@%Wcs4k2vyTKz;&4^SXJR(<6N}6#@of{9~=c7(#^o{L`1FHXoh@FeaSNPr_HC{ z9l6x$yXk`H_<;Bu@S86uDZ*mT*nc1`oA(8hQB~d znai?hMl}Tr6NqI<|Kk+ps3Rnp{>8WR?0Y>8%kAybe=i#x!awyt#Vz>#eg9|ZztdrI zo(SuT-_jj6Zu7S8`6kZC&oDb?Di46-2Eb2Os0;%}L>%R2`k2$behp<@jW>Q(C#T<= zbFuR-I(G}6KGHcgX=lWHefkC@lL|UENZ*lM5$k*`~Q@gFz&imku6@`wQR6kr^roA=h`T@DL1H(s7-oaaUDpE3B@ z{6CU;@c%Ai@>96$i1y(;ZcgH+Ah$kc5KXXK!xWE@-@>9uMbQIDWyCj}-pQCW1w2Hl?OGOz(0`dI z2_y;#Y`_cMFkq+{nScQqVA-X}HwG!a6wUno{+kNRWu#+r0;naR9q?wIAb=WHx9y)f zptLxmIINWo*>KuTNDjxxaps%1d_BMz1$utZ=hvIBJe6BL&J4zOlX}165Hz$Fts{yN zX=5JX9IpLnf8H}GSDjgFO@n*oG5Noa)X%#mniV7P6n@Hn_*rjm<5gW;w#f&0g>3Sy zx;r1rolI66Xj%odOFs-j9nR0Thie-p04gb_v0gWD{s}y*-g;Z+)k)0r0D%>%Kq9XC zzv@As9qS!UuSNes7r{%JxSZ1;{7sc)(={<-RvOIl!v--!WdLy27 zaRxs3D}?iyN_o|V6W=QUwhaW;H}Cw3U+u)tS>co3>2rGsX!mvy^*mB#NB!-tDgapO z{7GhyixmN#6%;SOf~D`yP@wX_yIly5+dIyyxmw89IP$E;q3cd&T*@k%>y2vCFaZGPev zOog0_<*3sBd$Sc`E%>!gF9!zw9Vcf(X)pN>I)*+~z-wX61nOI~G)O9afd2D@!Tu*A zO8r;s>uY$^MwlJV9}S&BNl&I(?M*K=0;FT#aZ{_E{_*l%saane`Ivt{(2o9D>2=w9 zGBbYwi5pG38Iz#(2pdXV-~_7>0m7;Ykhgz2->ms0y^-;qRyc7_LF7P$Q2u$5A z^n5ONSe7LF9I=`DZ^k82?7OOQ#fcUFIoODqp%d^2hv1l!_n=-YLh+a>sO*8()_%#^ErB2%T-uYc-MTa{ zq0yZ@$O!@uI+|CU6|;;R4XNq?0{-mhwnRgG17l!oku`k4I{0Q z7F|61;0OAGuS*?+O41{L;le3+)S#}9*{u;nS-L2-yqorM3{J5FC<;G8H zx>{5q>uEdSJQDyk@0LD=Syt1X_}v~N_5kQ7Mo>2f!Yw-Twws>9%cCx4$H1kkXJ<>s zk#NYH^!UlwJEQwT7Pzv^?qWL_sOiq*?ALOw!t4nABd$8YT_(HB1%eMT24}o+@>ds% zMR~Lp!=s6%Q|lAeDYLmdw(*5A+=82Lu0Zgxo=}Lh@3FEfJ>lsQ=}wR={r7 z6Ut%qOmd>8*i&|%{|*RUJqaJag~b)3olE23jE+ho8Q_!gzh2AYb^5Ubqpd8NxYDLG zul5xIPer;Y{jpqZ-TH9%@vK4$T?GvZg!pi4xiJ9$rOfF}2{0BAB2aYe{4Z)2rCMf4 z-l~G;9mN)yq!!q)*qZ^t@*pF;2(gF6L7Eh^4e`|0cPWy{A_d>&H|7_-b}lYqchm5f8ayQSI2$`KH~8GX^c17_CsJ62hjORKdw4xB#om? zFtR-IkiY3@C?b8k%=TJI8yDE*@Lgy%k;lf>$Hj-mLKYt|E*pMuk$(B70^&k zAY$9my?2)xfTvv#0K1T$;4IB0tVkYWjOZ%8@Bcy^tLd_5ZPaRsMiSLy*OQ z8hyIhk|foqyPU}T*Xt#;Ip4+V&!VM5U;}#{BIp5-o-&?(C~NKAKRTLk1)4xsC)f{L zgKm4-#$%C4Yk71Wf1+x4(*ai?wW7F0lpJ!zgkzH(jJ8{lTYF`bSNmw&>oFFpGD=Br z1w7T(v~5IeMwavoR^<_>-*de`UDsXvhLJbQU}hx(4?Ce|{UcOz$C(DAOt$MXx}QuA z6&-`H1ZS5e8}c3_3D*g);?26bfWPC@2fZ?8C( zlw+FmYdK|_H3~XhY;GZI`+MufPL^@@lkXKVh*_6>NM8gV>CsY9<=HIBFhgg?IJ}Zc z=)=7Amw^WySJH!1uxV*C_^E;*9oO;AtQj)Zf6L&S1Uvv`A{$|0PuXQZ3;C`7D2v1W zFlJ(k;jA-{t$>Ex?z_6(u3zf%zv1!e>i1J?8j2pf9v^fjuCy=wrQJ3jC4`XlIZAs; zT}alHxL56fodx)UE_l;_>qGHvIuOj%I)>pHCPzFBPJ+oW(f?fAWa@p>VJ(&%Ai4dP znI(-cS!Z{;b?d69lPD}#c6j;YoSdFWFqd7)IA*fF+sFXsI!n}950a-=b02_9((f)K z=l-BK(f&0P;M(e+t{A+S+0ea113G`&{JoyD z$%(_xhgs;_aCq?~wo?C6ep4pp&raFbw1&In z)_;C*saL0JX8yrhJe9E=shDyU77waTAy31Moe|67VjaWk+_?g%6VEs;TC{1*W43XP zxHSktR=Use8#ny^@uv4%C8~^LT>#G{9&tT0v7R%L;3aL;Td}wJH9=NowaWp9nLa@l z#R))SEO6(3G}+A3O!;l|c{a4soLM%>d14@_dM9I@-{Wvk>-eQym?0wxVz2d2pl)|s z`(AGv#z)$p`37(+UPRVi1Cj>r69a&^B3D9I){SFyJ$6%Y4Ua^WWAWzQ@Lnv!JImA#9oQ@U zs6grcD^mYR`<<&wJ3cktOcFhY^{pQBXi1F&w|Lf{NUAczUH{c|G`~nW7>xMIQr8t9 z%2dNBV^Oa2hRe+Tk#;oNOBj6U^!2*vWe;{vbbOnSCtKj>8=am_+Y_?=P?+FdnR0_T zfwXY4!p(g4z~~}Og9OA8c>O;UsN@U@ffS@pS3FI{sd04cOZM1~dK3Zu&$eOBX`z7w zg&>g-rY6zKVHn)TTgsT^%`SuzdLbk=(SLPMzgN8lO9h1109k+A1Q{+HzoPm%7)mn* zJ)AAG-N5_9j);AK#mq1zg@^+kvHz1DG4GpGML&bo@w%IuZbrz>K?GAvVFLuoXn=iQst?b&ZIS#AauqI8vOWQi_$&)&! zsfSMi!sO+4t-9Ww>&@|*eRO<2N_&Prbe-%>KcG9y_(um(p{OCas~9!sL05}ilr^mO zkYX-HAgA&^a)AJ~)+x$9ug-mLmFJ}8Hg{AbA4-(~2jADnrU)*9Eq7jWP12ir)Bh#P z1Z~n`deGz~CsMXsVw}MV6K`2M@{pLCp!~j~Lk6;s%>pPo{CLHn?qBd?2cOc*$GRH9 zTW53tGV3}fKO&Z{>QfT1$Cs?yS!1YL;dzT=<6D+gft<5kFtWXwyl=A zv6R8`$7$zR;1GSNNKyp?!t!(>29#4ObBAm$@Kj}7lg}W&!Sl0*ZqR^nE)mfAEtfl{C&r8YkK} zKjMvcoGQV9l?g~zvw|u(ycpbbtz-&PkF2t zQmF7W`IH_+?{o3jI2`UU(l;1&LBnMx{OU<7wpcU?PS>bI$KN4|7X7>kf`mtb~Us=?b(-M;Oi);zUfc zWfc^>cPK*6V#b&yPgz;Y>1r|D1$n(f{~kkR-0tAjp$`C>OK+F52HK<}hxnsDja>|& zF3tl$wk}tU-*g{iZNd;H^4El+%|(-OX=<(KlchV@zAvuH;z{Na*yNA;Z<`ad6A-ln z-O`Mm26xQr*a+uFcKIkLB~|eRc*P0DG;PpPU1@r zhq-dv`#_Ep>Go~8~JV6b?vI@jG6R3 z#u(OtOiq|{Ro9>w#R^z8$-`-Ov2p6N+Bl&lI0m`Kk~9(kSpuFdm_-1Q{{?&wvCjH0 zGrxVX@A`Z@T(#jCa#+sst{XVM=%Ld%gwt9uF9&rfGotvX>$d*5*Yzi;9d0F)Ds!9P z`gp~2(Uemkx@lboQMZq_WEj6S=@x^AdC#=?gCC5!G##Tx3Uvxul$~uuT>eD*Ou6=L zGX3YrO4k{9knfgQ5`JR|%hokGx0JHTos5zl9P3S>;RA0B{WsNr?_Ke>qQ7+yj>bV> zd6p#FJIR;LyZ#pwp%TwzXm-$cKuin=twOubO2fgNE|<)$2pRiqRBqI7+(|8f47?&?T-k z1sTx;P^Z#oTWy1WhM6}rt85vagv>yg`KS;7961W9Z8~iLd&+vwL~1WZu2d{PL+pXB z#ZLuF%9Guk#hJHge1cFRSu3SaS7|4?imp>(yT0f>);ZAO7}Urgbnj1Oc+sr3x>m>F z<3V@k6%YNTY)ZD#AlG5d`PlSDhpAajm%dd+(Y6hzi7x2Mt-ZqR!Y{}8%2()L83(A( z2it>=CDfrez$=2)`GeHI6+WnYj-zX)G*UOCuOq={`9iZ8&T=|!?|e0bYEAaok4*|^ z?{bspEqV1IUw7>_bw*j)kNSSK`;Y!6Ou_R_hyRLCfpGRD;P3C3d^fYo)R$jbL2b01 zk4;$n?@R@W?+`zbDhPRMnAd{2%|&+}l>*2Qr>t4`iyKixKa^N9Ap@Yti6MbQ5}igl zy(OlWo+LYC})86i? zUYxGx?}9SvBjFH-KAXr5y}Rj^-qSIK^tR1!(e+ktT^10etN*X0R=%tx*YYh>dUB-6 ze*SS+lK@&|khZQ8KbX2Q;7gvGF3<-gWJfSQ$?6bV?x3VBAH~t9Yl(KWZ}AoS zce1!!gzB(Su5+EX$36efPk#&6w&uIooXmXKS!s&*FpH-e4{hziflQKq$u0@}?AFi( z)Q_^;H8L2tv41ruXFhY?_$Dja?dazaU+;HM17q+xRvKO(50QiJ)cfoe#}Z95%VNxu ztQ-ZidLu*|xR_gs-Xj&n`#j{ZE2_TO$CGi2W>D1Z##L-63_xd#gfF9EWeI9n!wARm z-qc`gV~l-{`lX<4$nm2ww)=I;e*LKy#)Yozw$%XL&(1I6sw3yC?FXv^08K!$zsX|C zXhc8Ow5?+ul{iA5 zPJJPei6NG+@~r5w68qL1B!hF8_jO(5~cna12*JX6Lc{_1>A*u+7UCtcTD;cEQ&XQ-gfi zmT$?5UcCt;05OKCLoi}PxMNIdn0Tf%``t_j0gY_W88lT*Z23I+#H6qS@5S|7f<5(X ztgsGLx{(4A2xUB?Y2BVal^DJ<5SCTHQ#a&T~1EAmz-@BK3z=@KKPHx zzwUhW*^Z(YMR)qxnb3ODow~eq@5ZS35_hgkq_ULk8lXUQ2T~~9X2gKDX2>fB5<$Q> zUC@fuHoVZ?H@rhj<5>_3J&LXhy}(yxq4K$)ruv6gL(yH%+DolAY4ulfQNI+zy>03o#4{wj0M}Hb7Q%<7(aXKxN`BByeYiFG z!VXhtL;W5-i}j>q=kkMoxc?EIUEhPW-{e}jSJ~Z@^Ly&^1nSBf(rDr{kKaKgCHTOD zcC|aVS`*GM|A}%1kQBGN^hw&>NTn05a==LuQ}cNyw-Erc;69E@<#^(<$fm`{gRRiLNK?IMO;pHRV0ivb;n*<-Z zexL>ab58LtqN+oAWUKW51s%fpqmDjTGOb`%6Kw!L{_JwASByHdeDGZQ5qCR!>*G`T zrh5krXS*z2>BcDW1Hd4i3R2A;=Hhlo*XBe67maww$_dS)Rdj3H5H!9pz)?ha)Eu&y zykv+I+F5jKF|RRu6+}Z)LB*{TrEfs+WawLkGpcT3zzh=7cG1nI-lqSfKj2A$N_>^O z&Sq^6Qj?HW$K8ML_n&|EFaCx7)Af&arR*QdvFY&sb;zRN`ti1L6*PptKvn2&M_xTs z(^#ntuK)g_rOc{6Sd|c(D4`-&r0>Gu3OruSp1JgI>HQPOl>-T@x%jC+?h|kfxR;&5 z;Ydu=I@x|05+-o1$^V;XR0i*#{fmEY|8)J^zhqY~LZA7F7}(!n?SLL&7P%8)-O9TJ z;7bO*^-CQCVEgg>qh$05N#(f}cR} zl__6lrC!%etu@DEqW^f=LrA^dQ(^~YjrX7Z^Z!5jk7>VezfT7AR{jroxyUoP;qhDJ z#{zt`*(rVMLl{;N{AcFL&D-v{>yWi0=o~C75gii(={bJ8_({24w78A=?)N8;4+<{D zM($pO6{f~+NMwEp&jD8BGW1F^uR7z3YLEkwA8+v&v}Gsjl`!OuN{qFBhdP!#3$64z z%fWy{W0Kl*{Py-K?U=1=^3MsbyhxF}HQ;B4M+vGMoq#p+|Ly9A9Mx)DVMKIaQa%(M7U0=VC%CTSW(}Mz4WKSr7D)}6rthND@PPN#rP@?^5**x3_&9==cI4n|ssoZoTWfqLbgE(AaF zb-4?CC9vrm?X3UJoyNBIgHiXB~cOdZzQwmOb?8qEbc7c;UEku|&OzvxA>H+CoI8jZh# ztVi@_{RO(aFO9SBc)Tcb!%P+TX13e>>bu;Xtvpd=;JjpMjJc1GT9*EZI@}C)?F3S2 z^!U{JoH9wuVx{_g4tXe`7u^?h8%gK0+gDFRV$fC%`ggtlQvXHgB=BkaU&9R*woWGX z4gggB5Y?nC8??~pu7jVFkvbreq-ezt?P=;66cU;=nNR4OA5J47EYS2CK%CJQh^=n? zq!>HM&SK@0GVtSlI*qdFH6hC)3YcTfEIW9=b1D60tKtx6Oz-cjUB?m)i3)~h-%Jv zTVC4SC}2-pv!9C1sCqqq%5zC`WkqI4LM{Bw;$3V zlK#OnbEt1fgXDB4$YPdmSC}?z_5w46ahW6ybc_mgEhc~X0#;^ z|C?5iGC|+w)lX7gfLc1qao2hF0mg$tOW7BbXOWUm1)OOVaKw^)(w$p-mN4L8a$uZ4 z!}xso#)HE$S+HzcFTSflB$q4YujV^SuV^)L?164pU!K@(S)`%=m15zung|k?%0YZe z|3zLyN9TOui=X}f>i_**D&!>Kcb5+h`h>-V`2Y0&(fG&_sv<<$XVLW>Px^oF{vUS8 z(hcVv8-y+Jx$C=ehqL^@XJ5chi*So+EtwV!Bp|lEbJ`!SchPtZ!b~t74YGM92t=}ruU~#GE&PCT4O(T=U_)|Li~c&u!YV|2MA5+bo|P_~qWv*M9`g z|M9NB```Z;8z#VXgzAXjpV6O7@R1!`#jm&QxXt534jRqxYW9@|i0#_!C$c^6Q1ncu zb0;H4MIYlM__y9&Dt^E@RdyfDz!2QBKn{dlh8(a|b#ONOFaD$d@+7wZbp2bn{^$SW zf5O*IBJ)R-^9gZW1^Py#SOD52VZfVV*0T8GVive*w!a@s*mRR*Dr<|9r5huIOky%p zPfursN>(4gH(oeC)b&4K9wPdK!PuaGzqFlve}DO}{=@(JA5}lv3fbAO+{#Xuf2i~S zB_H!Y{-6KD7*Co?=moP&W-1e7!Wus5g;g5EN4<3-PqPf40A-@GytxTJs}n8IjH6GX zj;$XycGQfR>4jbXh#3$o9x?_(LWfFBaIU*wX3>ClY}il6YnGVpzx@yX`+xEu{|;RL z`v3md>lqMc#l@HtAIVmG`2t1@mPQyWydrBe0VQwZhaA@1#(NWD%Z)peqcck#3g8)d zTuM>xxpide=(0h^+;RaBMI}eQ;x&0<&lx1A0(vSl`SsyL#0IYqFGbH;LrSuoGJ_GP zTG`+I-QU~oa`!*J=Uzt|p4y0^=$VGU(BGf&(X$%U!!#sus^YfM{50m<_;BxE{i}cV zx9@o#5{ZFa<&u`Rt%>#1Gzk?1f&##kgSIlNiOdj*7DTGxqk`Y=062?rTd z{b&#Rn1KT!Ag0N3&M`g#n&}Xr;N39^M<&64&^Lw7k+%RSufL~$bg%qDTp!ol{!p*J z(UEy?I^849zaX=#!kH%8ep~jf-v7&g`7aHDtk}eEt1BU!bh*g4eAiCfKW9=^; za7{v$>8*Gn;3sH5n3hV|<)OOpCPb$H7C-!?4|FnBa-3HCWhH{?mr&O9r!uCX6YnR4 za>p{6*cM-t0MyO3*lV1sSlQp-{r&JCT}@1O(Q|3;a`{OXp6dKn|Izt~hkIYrd+h7M zCOq`_q^rNz+kaS2J=H4xzXTs;)3aeYl(f^7Yu-&IScFlWcYvMVx7(3G0{GMy^cOiC zFL^K=<*=6ORt~v?ffEI0rn??$Q`M$pUXf^vpvR<3Nj1m;f(~}S-mS5{P~&spDQUqK z?En7#-~XN6uB*+q@8wHp?8%mEyC!o7n%|UXhkvXe-{QkR>F-m!|MWlpPw^J45~g*l zXNSrQRCsB|qewvmn%itCK|Efv0C!`o{FQi|S`W<{u@OEZlmD74bD)IP!(ji$Vk)Sk2#>iWAtfK6jTJUl{ua)XsI) zIDF#a24Mb#kL*Ipr?Sqj~rD4v`B>znM~bD zrX#^xB=|9cb|GR``}N+(5m9eu!L(WPTw@NBj2h%9!G|MD7O&Z1Gw&xQvO!p8%YyoE zNF76ucV>iElZtag&ioCljhcx!so72Dg*|0W&u^<=Pb&SUmB z+uqupicik&-AB{^xb}s4&Q}trCAK*5ph{<0Ay8ITH>XLD(weul1ubU_c5+Vg`>X9r z8xm##+wDL*yxBW1KI&n;BqP&Ag8G1`|OQm^XS84+%?aN}RSP0800mn88HJt6S8#qozpv z8G0u_-AlcKiu=|UUzzFP82n_O-n%`<+@FpKU6?(|v6-oucn_YQam~C(@j1)nDWHiq z8UASNZ@-`Xz+VYIK3@LpuddCq317qO%vfgQTE)aV2@Is)h>E6{kuQOCW@?rK_-69i z54PLIsTko>1_!Aa&h7acgfO}~aT$|VSPgit64?L-Ft80>VN&ZG_XUmMfOsx6#wpNf1vTfS$z|= z`v_p=JAsflUaO{pCI+n#Qa8$hWejX}uCinzAhtvY$?Y_XX_QsR&X(SG0M+#6CI^@#r8peH z?V2>#dfbifr=YiN#G$VtuT##iJYIBQ23@@o==<^B`fz>*&)oB+5(_)H?3Wec_tDv9 z-N|E&`F9h0nRdF)-oqydkHKB`lu5VR(i518z+oBvN*;xd&-)yC?YeMmt)|p3GERBU zT^8P%bgfd*cSWWrHfCZ{Kb&&&C$`vZ16X#khbLPJ+xu4l&*`4}6P;89!nfU-jqcEq zsdFKpT*ZSP7cc&?A8ofMy~<|7yT8k7{Wt%gI|>lkz+A7S&Z_x-rF{Ya3PcQ;gRsM* zZ9_u8%nI%299w_2zSf&|DP&hWxPw@`lD>o^?2rWX;S1cyCJT05YChfY49OY~^wvByUc(Reui)uGy>*wx!D3gDtu1CB>daI*{#us{KkHN>M@l#u8y^F3+ zGxNj78akTE)?E;=L{pa0TjBRNu!pe^qh0hF*}p-RTY(}RZc$LRT-#zhdOO&O%nIbW z@yq~J1)YV+jB{Aq&dXcxk1{?q=va8~15YV$Q|ekH=oZ8S%;^-(538w_%uTlChqfVy~UE)I`X4M1s zc?dkJu~(3u4wi|93PGT=3HC7l_p->lV08KeIv)80%9Ly z`Q&sy1Hdz%kHN>E*#&MVBN+pmFY;|xyK7cQrl2dPi=ljqc@3SEuKH7beGa~M%Rb+5n(f-RFB3)@T$0H7HkJSTM*yJB5~=jBcnbOn>}DbX-!9W|RY zZh*P^n0-E95ziUZ#{lC&_9`@pz1@Q>Kk2{A^n&vH{zcaRO?>Jkmn=lWiLi=F8EC(C zZb{^OSr>R`O|NxILHPMeAiiw-Z{~khNYd}GJm!ZYsbPvlAD}bB95!=CwzyNWm@@DNF916)iKr39 zuHOOvR z0R69CPrCZ)_|&9>@>6z-a{R#hU$GgV=o}sKGSVhO3m;%sy9H@H5rnqYR2w>$C|vyu z{D_5!kTu-3EOzKlq|mcE61()rqsg{w#$4=F&NVZ}(y8K z;$QgA`{1JmoaGM-KdgW|UH~Vsn!)5SkIbg!dJEOBef0LI#>#iD#8CK!8Gstfo9BrR zP4rx7R2?LXn-8lbnar2d{ul9BI+^;vCzuLLfp+Tm2?F4s-?wU}6H<_9gml`0SF%!r z-Q;hRAqfV}d_Ou9p>lS&>o=@)@9$h+`9EEsbeIvUOy~^UPyL;E{M29Fs`@|Vggn(E z^hj0ax`MPkQWUsE<<97 zp}ND!x-Jj zgMnty{```7#TJQ{nA~0d)lgzRKGdIOkNWWdPQG;z$NufCBk=&BJ~^E$kN%uxo;={| zs$-$_v6Gd0-VnoE24QzY*4_ZTVE<=k&QfN|&UytNp1MXr7YTY2oI_pQ&1GX&d!@>+ zlT*M9-kxZChl`!c!xjoOx`NsM;lS`ID1EjhVJc|G% zs)tD_lEMZoA=Tj5K4x&uU1G`5s~gD4HJuX|{&kl*%Ez?!iwzaY;S0h_|G`7^sgC3@ z2HDW0;J=goEjyEdJ?K*-^}P50p7h^8WUT)2bV;Bite&gKB;>@NcDwuozB=`nW3(rJ zpZdF&U*!2o2mZ7_wWaZXE5}}MJp*DD8dfI^WdqS;fYzGo=*l97IKmICx&#!f*NTYK z>4dMpE_`fnC0r<}?Qu(k58t5m(@~K($e}VXZ3GiTn%jO@nBhGRUQav9b# z6rPz5Yof(JFc{>+zc+X-x_$yeUji>J|3vfK@&u@#>E*3v@m#Z$dH?Ik+aI0Br_0^@ z^9NwjnFdND4pWLH{0WYNunE}1(&-?!Mz+@goY1|(ZpdfM@yYPYc$-O}^h#?jfBX@` zNqx4iT-=c}GwfF6F)4S-yfIi-AMI@kP6D zjqX*x+-xMJ+r3j?ANBO$JmMi!rZjI(=ho)a_`yw#owDQ#yvfnMJS9QwvHtaH0-1`m z?~UAVC-pZ-Rsrn9VwW!tG1_5+J%@o!KeH-Dg+kI*2h0^PwNZP4A02Sk_<0|diFV7? zKo}lmU%JG-#F6+b;!&VWJL>Bv`adm2)xXI?d`Nno#9ZZd2F2<_w2#rNo%paP;N_Qc zvgsE-cix^Z>Xkj~)$Pg^0KT!6r_Cg5VvLkZ;+PZ>(SyZGc1Y3;r+z%Hoih<&<$PA8 ze%NWVIacq~&eNLhw^<0?xk%Q7`mdvkp;^YDMRy#as5xGSlZC5(-Q3G%ju_0mUh8y0 zQ_w%Ou?-K|%7nDRG~$!6Jzh5%`iD+5)$MzKTiKVs0HvuJxk9whVvid zx;Y~XoIkfcm&Fy-IK6zSheqF@0MyN3-1_o|XkQIc%8EDnhU}WLI0EwN06O3+)?YoQ zMl9f6+togJ;4>r8H(39K?jG$qi`}D(;}Slg09yc%O+1g2F*C;lfech4^?ziW(q`l& zK+u(=1Z;i&0sYqToF9*EJ@7xTxM{V25WgF6LBr%Z?0z*q+-!={H;w@EdIdwDyu`Sk zbO1CTTHCkR)Vb6BDsRavC{L)pe}AjW0jWaJux{jGc`J`%$5HTTA9hbD3(Q#+yAMlH~Cim+(sK=0q1-T=fkm+V~N}qAir9|K^2GH z{?yRi{WU0%x5YWQM3V>Mlj2D%O?L*(hr^UZszWesE%c-F5UT#>p9kZ?dv8VSGCaU zO=Io%|5CT4v1Zw9ltezt{M1VQ6^A0?TZexNR3q{viKHBiIkx~}KFn8{H*u0l0MTR! z7qVnb%`-~`TpjRf@|hbu?u*U}2Mytf2n^rTHiXP?8yGbl0_>P1SR@{Qgw7d7)*Q*U zIPTbuE5D4f3$74kJf%0mnKRxQe{AcnW974`kkO}p*l!K-z12CT2|%%NywZ@3B*Iyl zelvMNX(p3Y6S9p2NC(<0KKG>@yL!(6F&$`zK$sMFYU~rZIvl<9YM4T;=-n<{D;g| z&?mQa%Ex+7QSr_TMK<*Akeq;A&2yEath2LkT90F!o^j6ogp~&xdp))vN5`a?j|C~V zvI>2v(DxF{yEwYMjq2~gb2uN+M;_>meq`$*1IE}H{JZn>?978)wFr{q_ z!OtZ6C_7WSImN+qnl$Z%-sR(p*)Dk^7x|xTsfh(V$VEHtIh$3`lUKeT|IV%{^mqLa`{(cY~&{|oOqt4M+W0>_0wdldNzaBiZhObBqJ zm500B;IMJnjyNGI6yOj1XLWp!q@SM!>xB_AEc|%J;+mi-E#s>_^Qm8;tP;kpJz%w_{6kK0i z8qtb0N%H9eW|b=IGynAO`vh<$H}7)Rm!IhS(`+*@hYn>qI98nXd2f^R*tT>UZeuvv zKXrMVEYgH4{TYx(_ySiBkgB50J^`{*jW`!3R7;>DqFvKiv;)UQB_jpOMTGjKEosmy zZnR3%D>CF@2IQneMEB8^h8OL$hvKg-Yl{j%xalxKJiP7>PL1?RYqoY^y+c zvNHF2V7QZG67}TLU)7=Uec1w=+Y}P!fu5InFaWY+Ep&PaGJ~W0(1iEMKXXuJB_uje@`W^vBOx)IoR1r zD2#1*Ze%Y+I~|rsXG)nqN*#{MTvLr&?Ah{f3ieb!>Rm{DtADyjj$quoMVhW{>fLC* zfy!FfgacE{K}g&Xs9Bt6@>wTW-Qf@`2e~Q%zV->Q9mq6WKyn2Kx3qQ-%P|28!& zm_Qux^Yb8Z;@7i?%xAUD{#~^>&4B&5SUO~xC5MSQ+<3u*?345iK*@=BTSLbsCHOxH zcKHum0eK4BLOZtU+&=ivZMBfx`!ZC0I$;UAXo9Mw7-TS|XZheV+pfuAb2uQ|^)k~w ziA~7%LD!?rn_f84ehK=>E%i3(8IY>CpxhhSHd24ll;*$Kj??X-K8a^0Qfi)@L^QnZ zxbB59TTLf$LbSCQEO0IA`BrxFC>Y)M@)!t-Q~_QdNcZBk38(SAr1KC0S`>!26?9-C zfB3AVOoA{k>WR5->CKD2f_^>GC!6ha-Vv`PRH!;R3WoOnr?x+&u}9ap2*4NfMFt=b zui!`Z&U@d9 zVrh3uZ_e_!!0}TW&H&4`oNXNid=lR+&|q)}6w$JJ7&QAaHyx_mt^oR2z$G1MZ_*h{ zwWtrpvrN#n*?FQU^cu(h2#CPwdwvl4!=S`RrZEXt*28rIc5FN-H4cux#~!24wA8>L zU~%4EBDKpu1FSb5I^BPBTBdg1bu8O|AB`evdZSa0GSvNVxW(S#*Vbsk@IBG$al( zdgj8aomljH-wXj|e_K|KZP8mz1!^U+AnGmUu^^trOMde0lB9?VQ0_PZ`6&avoWVXx zo4@h9L`^o2LA8u=*_p+$xkIE< z93nK|9I~7~cUaIZ7!(T9+maZUB!d?rWoLw#YwJ+;%3R-qnj1hTCu+_MMrL{e4l4Cf zOxbQ)@JfB`DHYXdX{lqYuZLRS4 zR8xzuO(fswgFh;kp-7h_2P_THSm|Xs1ZC?>{Rkm+4tUbRctlCP54LLDpWn?j0?h&J z%w<3m!NRaLGw zVlSWa0qR@L7duvo8f{l;%|8!gxCIK{oHaSosb@J-3EomGyID1l>f(GIsv~Y2{HpwL zxxq%YXKtI!Seh9&V#c~)unUgnQ((|3WVNq*v2zt?nWZMcUpUP%4>^8;{E5|#{KRkR zEU1Qiv5vMYZCVhASs!CxZVrsr`z~iW9_i^5-kRi22M6N~@T1IaCt|V#MgHY%L#FoR zAp6?lsoQBYNYkBrcq%itY$Hv>~3&aq!6i~lzK0qz?zLjyf zK;pc)l(yaQ2pyHda3cUu+x!K9S(pmQrUJrgdeJ0A(v435D>g7fjGwl)Du}-xe%Y({ zrtz@i8~8YFo!#pG3lMs%vomtQR}r}wssKs^G=}sB3Ym_vA1-qd@ZMGm&iX^P$rZ1_ zDS?2f^SKX4A(7@rCxBDPR)URSKvHs{^}$Cf1v~`5!x8vlU=Q(#875)Oks8ex7A)*k zoIQ!-E)^Tbv{G8e32z^Q81C|KIsUk((RbYU7Z%<_u^pRy3)I> zo@x1>e$?wa;{+T_9R&|*yBAE03v5Zde*mnJ3c*4~==?kQBcu4wcZCvX!{)s0yb^{2 zYL;vZ7NMAumBFG@jB+t$timjh(Xx}|&JIL4ZG?lu$Bu;j=CLf6AfPz&5lGS>C@ttQ zsq!CvsZ;3K0>G$^+93BIDE zHbAchrh<(A^e!A4@h$eazve8w_s7^;_r3)%&)~qwTRI6y&;P&PN8We425Z)qRX4fe zq^;&)SU7JIoNA~peGSI)Q^&@YnbYC_p!mT-!OyOgRb>Ft@PN^-25eeNQvuqX|5SMr z%UTf7(!mgfB-QnEM_Y5uygi=d{Tti!rj$5IliS_sC!(%{J`QD}U~S(bH|Q4di124j ziFP$0E~R}PPYeIDrl&OV3HLUYpZJFj#kW9+>%Zk~<^I*MTy?|QIQn(!ZB0jGt$Dn8 z=V{2b!-j#wJ{0}9cD}QY1v@{lI(KzpES!{#17=AZjjNPp{bF26!ZpYoGuqK?67=_b z0}Rfh52+4x4OXS|9|40r!sVh=caDvABH1~rWBlG0T!9ANw+|dwuSCkFyE@HU+Z^JuX>!)2rSLImmO+NA= zbbrXtHFb&1GZ1pMR+tIjS?OEcc5m3v<)-uE^>b3`84)2+lI`h=c&*(GXY%Z511-&Y zT(7ZHM9lzr%Jg9lyv2xSWqSbSY>!m%RueIrN9%fWT#N;*Vve*$v0CB%RvD#yo!&fD zj=Eo3X;-$@E1xtmCU?OJL#5~Ft;%PB?O&6VoZlrCoTgkDso`(}R`Glkqv#fIP)QC1 z@+R)oM!{f9XrEBYp|BfZ2Yi$L?0Jz}ABRWj773P7wQw4GeGM6s;NfnhI&Yhm-%~Iv z^6zJdCF^E~Vdw6Ktt_MJ`at zN3;RBMXax(%l$^!6_yhROya@j(Ax*zWa1#4%dS~ro`q#3b<(;Szp=22xWS8mb=<;H zUJx8Sz3MCRaU&G#_fvyU2u48$g@6hi_ysUmUkk?}x_nJH8JNnRWMBk7JhBTdW=%=- zb}wT{-O=v*%@eq~gEAdK>hNR>_>IL&W?M2Kgh>K0_OE% z%j6(hSNSK|$Rk*PTYq%SBJ|!;#43|#n8!9MaY=+q0PI{+0IqOY0tD44fLPiFrT&bE z5suBn;LjMW6XJkw$p8!{ymC#Nq`Z6kDf{!YZ%-;aP8mVSxmfea5s#;H8XG3rc%Dx4 z>HW$nT6D_~fO2Z{U|3FIXUdZXQjTjs__VW*{?Y4({q%<$ z+#0sloEsUAOVxbH7U*?DBgP=kP_FLSRE8iqo713R-vEPyxh=gq9|JI9p1ehNJ3mit z@IC(A+6+~4k?~93>7KJM{hQnS(f)Xb^PEOdCgj8m@ZgmKQWkPzh!K&V40_N<=#K4Z z9@Vkry?CD2yEX5EG&v%}hIw_JT&IB3lK)j<3jmOQU^_tbuy~VSlZr99;21kukeStI zg0`Gf-Bc_QbhQJA!5!_#O+HYkfHwY2yDV?1^zUO}_a&C*U_UT#-^jqz_5kK^e|4ub zohl8is;hKU+jrT*{%dGQe;b^voe!nbx(6qX9RZYa&O;Bn=}nWgF?D?{#`B!hAQ zqRT`rVj!Coh!tmZ;I;H_Oyc$J3;Xd-o|61adKYB(kflB#3BBNTUFae3P#AJb%U0yf z=A^VbR`k!Yty@16zgAFR+wXR4opuPcv|T4=$v3 zZRUu$?8L07*XcMp5jUgR+wJ%GU)~4bkwOaID&TtoF5Mm?ga`1DX5P}@nO-eBd5g7y zPaTYhLJln--9a!?1^}24#Z4Nm(#k8m423|{i{TL2z?}o9UH-*z0LR#1`h5j0Ds%)O z<`&&YG`+VE!x-PU^un{JsL(zgF_m{7I`HH*eQ7+v8b4k^G|#zP5}UKXZe6TAzAr#MBm z>C+2n>CQr3Yho1t1k>EccXAd^GQgjQ2DfyQkA|PDRe5;xj~6Z5E&)!z7GSA{D~cS2 z{T2yK11w_1%awjJmzihcq5s{EKwc$+1k-dVw^pzqnF0lqYB<;|Uu<=9=6I>m5y`&^ z>}j^<$MFou=NH!WMve+P*8N8Vgf3pY^TD?|HmlCq<;KfbQ2!$1NBP#)|4W^ym$l^6 zG|fjG!Se2Gov(G@VEvss!@)zKk#r(*QSicM-uqY_np^E|DDvnAKpOh9Wqd*brzgw8 zl#x_62u?%tXSN|aL=!~NPey_{f@Qu_A+8B+MXvmyCBUK(ovjZef#R)A(mr3T=a?#Z z)-jKj@5U7R8MBrOmsFIaRApfz9~sAqmYeZ-tNWIo_p9SO^ltJMg9LAMITT)F!w9(V zb+Zl(h~y3kfL8h&CnKK*IJd-igFmGJ_PTgDh6lq#J8?W;R=Y=Z*x6q?GRURY1kx;f zkQPY7Yo1(u#K7S8(O&-7PVkf>fG*?Dm7Yy*_I9s-XC z*a|7~h?NUg457_a@~;#1`%BSVB12eKT1pvr$6QkWh2*d6%{`g_Z(o^@H-0_cJ2}O$ z5z3QC=Ko}m%01B|jU&tJ9$e7I8$H=&rd}QXK@J!IZZc9-vQ-T!e$Sd_rDos=c(vw8 z19z>){RK8kB4-HraQnPlVxfi?14e)q_58{OaNuDI0Jr-jK28oWnah6c?8obTmmIJD zt4Rx)lMTQ4y@*~dT!DM}EXr#3%-2r$pDar?NV~pV9@FQt^OlG4_j@1Vm5bEB)&FJ; zF?O-B)}nWo^AjC@1PffvpqZ4hIAc7w{RfmZ7y>aT&n^H0-Y)B6!On#l@mT0t+;Q)l zB63!asu0L`rTrVntJ<+C!EQq^c^Zl|TC1&4mN9u&T9Rr6Xe%>-Cg*ydh*ID@T2q?d zMY{DPEdx{H^9rB_CYYjzz5KUcbhdxGpL3>%yy^P%{o2O|#^a;=yOrY$a#WG!(Ooyc zo?+R1K2Mj}2yOWhtK?hFXlUDcDFpb}#45BtHVqOqN;nt>BV=KioDPmWru@Shr>IgG zuVJzx0!2>9^C|63Shx*slVL4-`p_Qv-gX|^Fo|vgLwzc~17081xv}U~Hg=w62WbL3 z7}vMP!w!Abd*IIGvT4|)hhRK{6V;=*&-#;wwK!^$N3BvTuFB7GBtH(DeFb5#DG$GB zaimR2xN>7A>`d~JhiN4oku{&e=iN3mfKpVMqAr#)WwFS=%*m-(QD?;qB@MDdXW_T` z$2@~jIL^J?U3Y$yZjO8OCoCtdm+$ROAnJ6V3XE-@BFSvyM%mGSlmAosXmc@TvLKO< zAWK;Pzk}()Cs1ZFutDeOl}VLUHsz6VJ#=P30KlK?7;ZQ)wKp?>h6s1 zLVA_h(MyNGlx&Z{=~3(!DvwH{j%)pt|JA&v_=6@2ZW&w8pq;P-4-PXi^Vf+N-gxAe zm-Ah8P4M!mt;t4YAvx0VFLXkV?@}<#*+qtbyh8#yU;qG?I5s5-oUsnTFsr^32;8DR zP-D;8#Vw=`1HzWs8oWw#G{Ul}tNEwMPricgF9P+0Yd9}X?h+2KYlQ`asAx+HGlHkX zRnlb{i7m*9kj>E0AfRMe*(~shF>-x9L{vIp_*5yrIVLA2xdSh`b7RY^mRm*|(PzKU z0yoxc#-o4#R$<+>cL`@xiW{(;IYMJZYUnP@uLaR-$Wx5G!M z$~cKu3LJ17g0r}m4wCb-0zmrQ>IMXK8532PMsi{#oCwFtx<8yAfQ|kc?zo(Xbg9%` z35{_{L8hGaMKS*mQviF}y__kG~kf@!fz!yhF1z55a*-bkUrTfFJ+B?6W@|0o`nw6hHBaVw`R5dd-Q~kl z!7ciMTg2Bqbm8;)*Zm()Rot!XWe?OxM4?DG7DKepeQe(;B-2e#@{h(Jo3_nY8{srn z`PU-q|6-i%6NbY>)x{0JyA$&KF)H;9txb2X1 zUM0Lv?v&{#P!jEW7j>Q-QLSH}76PSSOf^B#Hq5w4^R-M%{^kdf@r=z%8!9yz=lrbo z853zZA$u^S&bwQ_9QabtwkJVGgMo*gh#P$;y{)c@MZ$Q0pY*I7 zZZxW%?w{u|Xf#>Jb3wYYZeToP#r`keSYL@}pwp?J!vB6^WHE=5gKzEmx~Ol-O-6mM z7bA!;-GK+AGi3&d0UJ)fBoHJyw?0pZ3>W$Lff?Fa-Ow~>Y7)&82w_j$FdNe#k^_=< zrBvh-{@NVngIt|tfMsV&H`#e}K2Ej;G=77 z058isr$BGCXAER)@r1xg6yf$)GCBt#+6>?(#Iu^*SX_pP^11|W4{T`O!9ds z%?U9{A!S2h*4|11?}eNrdLX@kDBoHyZ101!?DvY}iP10Xe2Q?sCO!8#6)Hif5BgK7 zUHq$Iy!P=SsN_D5U^8ySH%OTz+y)19rH(gdVHZKdLZ}Sh>keyoPkCjl0NA|q^PQ8hPWv>H5@i(h~%lK-F%BSs59X#_1JfdGR(tVN%BXjgJx zNzC7s=cl~T?_VAC#>Gq5eFo5{_HOib0}=Ncjo&!fcRH(KuH&+g+Oo1^@#FjiCpzbj zK!{5O9py_39xl=d@~H*h2p~h})6ELlTQqd*#pG)OByri0&}HR;ZecQ4aKg<~de4#2WpsK?F zoD!eU1$lVP)uGN{&`JI+w!x#kMR}#*TO~pzp50ZlPZ&_@5Sd>NQRbVSWR;lCwFY%U zG^H@gWcI9oZ+75~CsTIxlGoZ38L`Xsz2Cd(hf|wHb!`>pK6a6_ta|#1mJ$*p4{Yog zX-c37@y0B1tD%S!7rh-)<6kSo(XK@}Gg`JK7Zns?aURB(P|*A~DMX-F9iuJn<_q+x zEsjUbS+O&+Y=XsxzHg6GCY>QhWRKcbjYyjdrQHG0Cr03+M6bZB2^)WQAhIw+UZ3bl zhR2du#X8mb7vuTL{5lv8n~$(X9*ig8f=|1;rWfW8fGDp^HZqw10pCka`r2c+WX(=S zz`(fME?S*&aJW`JuH*Nc0p=g#RE*EntEDm)Hi$I9{K&=yif8@udTigjC}_?#e-=jr z?TAaDyLD)t-cYoPaD@Z&S+ORv(R|~hQ;OZei&7uEyD0Qi-JAShlYS>7I~}g1ls`GI z*6s2G9c^yk5t#Dw&Kvn1brQ@t;8%a;r};}qNZBqGo=1994po%`IE$9es6Xr-{7F12 zb%YGI)IYgM0Xx{mHaa#Xtu61@YCC?~a+CjjHMK@y>!E?@VtHbEAW}LC$BmCyTRPUc z<$H%hs!P~TfS$1p75N5~ncR6C4#9hyQ>I)~*aK?oGx~!%C_a{rwEuWh)sM4*xU85+ z=PRA*=r8!md5Ke~RsMx!UbVh8l<|@}-H)ue zfEdgFU-@4I+sf`BoRAn5>qE%HrM-snqf_`w**DeYyCUB)M(D$Ldmjm!blKi!5nqW;V6n+?+05WtIogI&GmL<4_ zR4kZIYa1yLXc7#k=!68)&tVmSr;-~fc-12bm&n3@2pKj-iv*MrID8$R70YCH0 z?VfvOJT8D6a)Cc`GYBotR`GsV@{FiOj#Yj(&*J);EnQMRrY;3Mqfm{E*{mK4Kf4 zDx_BOD6*Io=Q{>K_26W?QKd;IX-b@yooox;Hvf4Ho%7^f$GszIv*aN=q1|h@MKAk=3P^<4#NMF0cvQZABNM z9nI&O3P1hC^HpZMkF-9qYp4RS6K!jfk#kj&2?ISSc&qcF-cQQEQeX^@kXuy-p^g8a ziJ)=B`lS3T1^vXt{sAP3+}C?*&j%{(D8Mc(b#@1HH+hWfpv~7^&b0J4xve+({)CpI zA1|O%&iHRtZOUI{w*L>${Omy}r!9AiDI5GKQuJ}D8=Y%DZ&XTIpLV?BId%;lk2uy^ zfdB|ZN*eufJ0XHo!(bmAuMcGCvJ4D{;2Gp!v&{N!HtZr%Q0>QuR6TyYxdhZ@d0K&Y z{%LxTbmhnoDj)I5rcd?mC`=gT6FYX=DZ1GZZTTEjJjopT8gbSzCyxX26KDG(o2B7V zgjgq|XfBFsc)Ant4^32obTJ|EwLyf=}so|IOg6x>bj5x3=<) zZvNDBox1?&_&x4@V#qYX)yc_gjjq*9hxz#{Mv>Zl?oFgQ3$mO7p#Q~8zrX75df%eE z3a9>WN8u;5b0R}+k{LugH=2zT2$}qCj=xtAA38dc_`(-0kx609H?R*q|Hm#{UUwJukl~!U43u+d|!`wpUA-6CgbuZ zYnT3dik;vEY*+>?bR_FGaF9a}1ZPqgvTltzr-%Jk95lRd|tfhGj4=cm3o^7Q8O&OD068pErB`fQBOflF?*}Fr%I+7fp#s9$xx{reQRw z^O|~J*SvncgAZd`vdsxtU1aB!R4y_svu%X@Pxj*zI&O~K4OC9xkiWY6TP!Y#qg-Rm zW|`nUuyvUeOPYZzT<3N=vPoaE4RX?h1?;^U=8yH8F-yjH)^gn~wL7naBMgh%w4n#XmE#MCACaqM>@p|HAjS(=$YSHg zbm`CXFL@ksePmrFr#_sJFu$(s5nKo*7RzA?Ylr1i`Ce(OzDJCvdN;nC`1MBT#LKFm zG4=_Ny*WAwRsEtd`zbJSr%SPx&53xvcp%54sHh;JP~9P4oJ;`Lb>wQy@T`UN4!ZTu zNc|-JX7QS5*2e&86ltT~2f_uo!klJ2iH?pC00NDy$MgG=e{s%d>uPk4-ZJVTm`5)k zdWP#eZ5ETNI;i5q+UY+69-Ydqe~e{2|6hY%SN1y4As3mFvpl|mwxhjzp}*5Y{S=J6 zz;^~THBOS7vPi}=s~YRN#8;hHB>q!!MijEM?d+|($sY&+*soTy14ybAM|cQ!Maw8w z^Fhn{3i(zgWVBActU*STR1cl_%j~*U>TvSQm^lfFgdb*wD8H_&-bluH1dEw z^1sP(M)H-I&~uC~ge{o=F`qOgh~#EVLr@p%t|6wv7ip1+GB)}&?+B%#K$zQ~vHiWe z?hz^nheB8%KrH8>DTs_7Frbv_`*iJX-NAy&E9jr|<=mud2=haOkb$_-sI?8wm)HLG zxzG!!yteh`)YyVouFYZy3#S(+c(sC|86Cx4S+0H$56&g;1~pkRcFL@xq%c742uQxS z5iQ2oG+77=VJ;0vo)Cpi!GMyN3SQUu_|YogN>}1_pE=by+gpzfIJnc6%t--gaS@x+g-!=F4Lyya8G+Jd$5L^K8aUCD>-+T0$ zm>TXc=Yr;6A`)FxM+7$fn&m&D$FQ}Ez!~XYJ&$i%>&QFVh#~`P3=tGb@`n!ZveS81 z*)Yp_3_aa~3tQXYw)p}5w`9(*_RID^oNEbwjAuH69uFot9~%K#0vGYI06iZqF{abX zjy>R8j5VAY;Hp*E>2nCRk4_;Y=#L!_T!Yk*f6;huw-B41*5H(uz8z1UxdvP zWb4YWU+~EZgqM8Q40|9?CQR_gdy7=+`wh!bo2b(oOFP{A(SHlf-DLkS(eHquxP%Z$ zOq~D7O94R4$HJ%?4}^g8mLXbYpSjl9o|iy$3m}OrQiB0v@a3QNKEGmsQPCSxN#y@7$({7)2R z_Yem=9ZE{hG+e=4qlF!os}O%mbE$Zq%TR94JVG|K)>%NGG-F|))^6FqsFVo#1U#`g z`d;fP6<-L*qdE*S#3Nn_YBXroXeb;BjGL&+;DP0jyamDPyl$i?v>3D`+7|DJp>yD9 zBr_gVfS=T-%GfzFKl-SuHqG`FsXV0{IC-ld0fn*Rxt$v?-{|<4Jmd$>b&bJ&LnS#U zJ$6KS1xVx7G)#vUpsvuz{;(+>-%_Pc&Dbs_A3}Y&teRP3{XwRU_9!IydVwBoI|l5? z^|k!}b4a(~+_!q+X5%^t^mPpfd^w=Le1tKCo<&{d*2UA3 zA2rmN=+wQ?wTe?2_>Y5tiL=x(hltc4={p3)N?oD>gOg0_Mvb54~`2?HLmg1hBJ&cJqqFPjTFoAAZ7luA@Q*x%lUD^Qc#)1)2@*4 zIrtZucvGUc^k!W8DAehh1cMDkX-_^A#+g9*I>8tn4Z%e?fPhOrxJr9@WnBwKi!#^+ zbQQ-6*teTkihozhD>*KrV#8t!N#{zZ1Y!(v;k)mc>R@;cd_9t@ZXk&(7rop5k3dBlJI zp**hG6*jS>kXasU4<0q)Lm@m*_3(;nIwa5k(U$O&T7IjH)l}(ur1jSg4Li!6mmY@H zZj(GH0oNGQ6Y@{u6{RS{+JA!;Oui}&Wat~S^^smat zwx#FY>V4|Czx8ptS7pY=I+M;gIT*dnajvNzeg|ZE+0>~jovo8p@S5A{&m{qUL}EM| z!}U^;Fx9hZj3mO~8ZN{1lQIt8O zyMUkTKh0>h_MMR&os2Ab0`_mf<(7XkNdIjU(Ta@)geTJI-_^s`@0j&euR0Nzu}>fg zs!SRy_=DZ=_)XJ(r6I` zpiya=BXxmFkr5tK8Xd^LbXGL~h1@3pUM~zPMPuPji0o@rusbv?QQs_?4_$K9eU@>TRKIPUgf{>i|eIpol9oFA;hQDMLM^{luJ_F_a~=A z0zPzyn8h`;tT+$*F+h-ob))n1R*!0wC2cx5Cdu{n^K0sGkVVHjwJi~H1bUR3rw{;& zk0uJ~m3(uSM#S7d#S(A}>0sM!TgZmI+lj7EvXNdc0v|`cjX68%?NieDBgZzkIskDx z*Fl-FzYG0SdvA`(p-l_hSaqc8;TYfo62(S@9jN6(@9q4UU?TZKlfR_~2BIGfLjr60 znL`a+v)X}uQ+ftW3O}Yz6eSykHdFp9#bpO5=yA&gXC5}J{;+TK{i`&Lm~WBe@#o~D zey{M*fsf<@wqN=i@ymg|x`Q<3%RqmZeQVLa8h3eDDH|fFA1o z75LF|rmW^4(!WFqj%|HlSWfp0Xmw$cvFz^7Cjlo@{7|n zt7UgZL^2{w1B&Lt_|mjiWjRGfr|-3p9Mh!ejUp4D8iCTDo(ke%$PGtSBSKlYJdXyFNYucUhQV0G1V0NoMOrHGou|bNmc?%} z!A2~4qq4gI^?4W81CK*gkzA$4{7A9`H}{*CtSzjdB)sL6z_?^#NHk(4JooZRVsN#A z7&659Pvu`hlIXx=xYi=#d%LpBGy*Iq`TrN$Kgl--0lxr_%J!7)zqQ>DrISSxPN+X` zBpJknN?%0Dp;ML%DR=|=-usYna#tbmo*Zo}<_r&1Y|gyngCcW*BgG;>4EbN80o(~4 z&r{;NiejMxv>shtGA|5A5^rW8AgCNy=ww59y~p%oKTd@v9xC|oQs*05K9c`pb*;*c z%K_uXo2^1Uy-ZA()gPx6f7#Mww=BSV4hYe$+&NJpx73xXP=tyUoOu~b<5X3)Bug2~ zQFJaskW5p7kz9g$Q5e1o{+{{$`H}S?eK{cgM)Xu&6_rf_b@PI*TxP?RxEkL*P7NX00akiFzz&kLIXroA>)NsWdA*N(wZ6>v z-}v=LOW#T9*y~(ZHfaPM+$L;))jvbK?Ur43Qjqf#7b?mOZa%j4{_+!U@^QrEs&Nrl zkRIt;Z_L8>nDPvekx?K%=P$;$06s%C7w@=3n|nO+W!Qo#e}7|43Pb4EYa8Dx{G`Fd zXv9SR9Zgx~m4TDl;YX%;Iu+f7fPSQ4IhAr3c}m8rL;3{p_?L1|4|NlmoZCAo`;#z! zTCD6v+*AiU zZW|axM1Rno)W@FHxVFQ9A#Ueaxfww{uX zNsd3ZSC@NN8`{bNlpXs!jN62NqJZ>oOfB%YHxpf^p8fIPkU^OMgwVxScBP?nnFfhn zI0OW=J3?-xtQjfn+=tIX#FNfh0R(_m%&kfpt6%A|E=*^)Q8BK}MF7o@I2-)+D*tIt z*=9+|a$lvBUfuPml==L|`G_$M^1%-Osl9W+ICaz1=DqIRmc++Ekj^x`>Y0mP$ln2R z;m|Z8*u_}Bc2}@;Mv>lLp{%xmC7IFv2brR;09L{1(SetjGT0J)b37DkZ|YB#z#&2aW5S5y&y7 zWsA|_PE+s++@xqI^L0PcNrt7TE*PIi0!F$n;40>2R)!xWEBZE?W0}?ZAgR*Bat>)8 zRxh-R25FXX-qLX~v@3NE!s@6sk7j*(HSQ*T!Vka8u!T~+q{K9O7Wtd?S{L7@LMJFOqs z#1ao!{|W}G_-=`oJ4$5`7RMC*#V%f0T}FyyRJwCJDhMc-{gT`NW2N5kBG+h{8OuDEMQL*dVXP=uv5ThjR=da`?bTcYwheH z=ExE)J+9hs8cFGbDAHP>iE-nGbwoWHs8+@r1gF>8QemL3NE>x-REpz4wG_;um%jAO z_+ZN3=LwXZ(#`Rx8);!&NA?5HNyGAQv)I!Y-+hT}(0AIhtwqi)9BF1jfk z=BqgF68$HAMaef5(WkKX8715i3Eu2H4M#LQ2`C8AS{c@)>T{$?eMj(E)SNn&0O`yalP$koBPIJaB9upbLBjCAPz z{x@=blAXAB8=IW%#{>@3S&NTl2e4?_Xk5{PVqw;e%LTJb28My)%qTJt3_#Y*|s1utS+>HU>J@qB^fblMgKF?)3 zS;@3YV{&4{h-%}#o4mZ)k2fAd{r`e^L*~6+%A;=eCSEw%k6O>DZnpz8R-O~lOM8d@ zS~2p7b54i^QChKO9EuZRf+$ic?9M2*nY{tkTx9iaGq!0@qco6=UWv3Q8_%gpo!|!U z4HmK(Ef3KOwj#X^>sCYSE8EtZNRhe*GBwW~^LctvHmnMdK8bc`$A!BnnBB+~kTIo` z!lr>86{R*t?#i0m-F4_Jj5lR|v|)M?!WT#3T30H2#8*25z|vkA^u;zRQX;$+3;;;s z*quj&EqE$qhH-VnhAjk2l?6L`iu{fcCcRxnaoEQZ-P~pJT+JXDg1mi}hqT-K+VGSLRIaUWl z0C^cjj@^kQM5GMWC@59cAjZh@md>=F9ME*2;xnBR*vOzPoR7bYC+b}TheiICcb%5m z)4@T)8u46DMPzquMN%YZP{TT)_czHv^mF0mt!!)el7Cvk89|FwSDNhbOwP0sqc7!G>O@(D<^bvg@Ex~5@CD*yuvaQ~AmqK&x zx(>hb(Zu`Q<~I&_2B=P$ZNJX}s;NDejj3*z{ZN*TzMs9K3~QumXqpG=tuJE{zADZs zx*$lt^~zkcSw_g7=9B$INb#oY;B_?5xUwN|1o!-gM>Tdj7M(uFMs@*R`TLS zYQ$K}bct`fn;Y`=pJ4|C2FP;TvnHblc`e8r)3-n<>&;A;N_ln9_mjM2oXn-!HwOw1}K#YL!e`Gz$2brM5H~m}DZu z9aI1dI0>rs#CQOV1xlKpQ6q4UK2-5sdK^=te-x$lpbzx0WM|1ocueWXce@>&{qS!F zSUp;`4L#Su2+*aj7x3A#8`k8X%e%n=Km(d{r)#}E5;k`^8S#T{zD^h;^bqNw1MN4E zz9)kuANlpEE3>10*V|`aUiEjt250(QM_$?-#vnO{-qu^2-IkpkG7kV%YZMoj_CMNn zpzn^XuPM9%qyB8rh1rhb1qyyV#%;sWy%KoJ%Zl=`s=Axv&VOYsRS487rXGZX!{g)3 zaF;4Z1HWBZ z@2_0nNde!zjiDkrwl|l0hrCI4(9eYDPCeiVmQ}@OV->ds1f3)lqcfwiYI24S;WLhw zJ$KjnTuJ*Om0k;bqUkk<;uWc@o7;IwF2*Mq}V9g zrzB#&R^%|LaP(_^0p+#8?JufOw|4!zZVXyDj#u5$6F`oKk3&nI#!jq zkn?`!Iix47-E{wI2mUedrtAOeog9o(7d(v^yWoh}p#;qg;YU3kPO_N#+|(C+$X29pA2u^@G}PMKG_%*YeJkTRUXz zPoDC>wE4*xgN56@Pk|%#=wtT=XjcuWXc=th>9q?$(NE?T|B*pRfn*8uBNq!u00_}D z7g7~Z3ZaiFcEQyhgViT6QwPHCIKU5ZFCe3B-63{rKSU$X4 z$|xPtsYWB^i9z!z-9VJdz1|7D-_lJ6zNzzRV&@|qyZCo8NGBSDHwL;dveU|$wSW@% zP$aSa5*}l~q~QX%tU2JYO2v{Lh79WR_P4viPJ>EuZVezVy3Ec4zyq)d5i2fkt-;> z$lEva_(o%&k6Znz-VNv-@&aTN&mx$lTRFqaY;2;z;&cVm8BS_#(H$1o)fNFzrQ`C; z!HH(TQr18@;%|lb-3AEvtC0T~k*?o@g8UmnyJaYa=pcq)c1)CsSh8Vzz{*6(!3Z0b za;Sl?_C-1Z>gg8A!awlBt4)IKotu4^%aZ4G#A3BNr!icEXcyVJ%g5YTJcPb@;}@)C z!Bwgqh~#)y$)ZSulDLr(T=a+?9;U!5WbjG%Jo~l zZ}KJ~`*f_YdCtMz@O~q}NoU%55i8pvOR27o*6&>?sb)p}r^Ig_p)ioxs9$|49Ug25>RJnf*fzcZ|l!51^(Hf0GU_1A z<%k`5<=IsABVMQze8*!l=Vx{Hm&8WeFjJX%*YST3oJ0OC$7cd(%KZ?Er@&dOoF4KY zK`G-oPRGaUrxP>H>scM@CLdu7b>_VrsF$3Nxz39-@TtSkHoIw{^*8v&F6~|9|3f;s z*P9Gu2PEE7;yk8s9u^ZH3{HdnlKd&8_`^u(;y3{JAdtM^XdLom-hb8FJV0zcm%DYy ze|+}ijBdf$Z89O?MOmjvxR_FOSe2NX#~Ce>a7*kAxgw)To2b~}{9M7#9n>5cS%-VA zinV`UaIEvsG^!kp&MB|=J*GnRd%aHpEN8d*s5}G+6aXjXKt-yPtf62@o{a3sMg+7+ zNEpkF%dMFKtQiO!k5j?PQB9jCTHjJ6Cgjj2?=YW6{~(HQ3L8#A1P(Ho6!CaRoj5B> zv_IXu@!kZ&8R&nbV7cD0&V{`` zzb$ace*^79kSuy+)7AsZFyIN?NWHN9dtGG!dILiHt_K2FGV)3C!OrvGb3NFJr7zF& zIFk6L>qU-$?K<{WHa=B8p05J(^_51jvhKLf(6RGJu#`3MYZ;spT7uZ=gHh3X>`Fkpdj-*KhJH9xFr;1gOKmJPeus$Q?Od8u>DJ2~KM2@f)-!tkYLH5upolcRI3 z*KEtFuOBWOfIrbjdVOAiw#j^<*9QO)z>ok@(bk_wj6#2#K;cOSye#=g6^fL%L4?k1 ztjMaskWebl%+k)`5SW{AFijuadKP_L*Hpg;N};{|@(N%imCcB}=-x1P298*g&YKCI?A1 zv1cQ8Z7-VLX*|sdbS63839!6`Xb?y|N&JkR--JfKa|hn=c2-%?q)wNjGmQtog#ubF z03@Xk1OI!iIA^|!co)Uo9Oj_L#LVr1o0?X>*dC~lXbkGZi~>x@nGjzK0qhaLFTf!+E%+`q}j zD+EE@X5)T=rWQ81)Nci8HO&}n+dIz-2!@oKo>FeQDY zMvP@PjcAsYe8xkCjIYsnX}eI16Eho-6W9rWC~^Q-a!;x(&D7ReI8J>rO`!Q!w}AXP zQZKjkl$j(kU}pq z>O#zqoYI?tIOV-L7+3z(&-p88cpC%e5*>&IZyoEs z#c>k}{SKZASrS0;dW_ZDj@qJ^emh1zEVd6Wc0JsPKHOWJ@xS5!OjtSk@&Gf-2h=fFzjV|l^NNGy(=AGd|HwskO*NvWD{mnAg%>&~tAK|3 zk1Fs8%Qh8{z%nY*p=3GC(RM zo7RJ*0pFwlP`1vGQT6H5cDrbj@*nLv{v%7GdHK`|?CAQ7WDdvm(VVp&)!V~#1kq6< zdgY*>MZ?3DDyG5MEt!hvu7ogDCPt2%yrvzyVQ=FzW7hNqN|+p{O! zc0rPZWjmW1feuY$BV|n>D;fRrW`TgR5LkVuGnpqGjvx=i!b7yPu5KNI(1OS_ak5QDhm@GN`S5~`Ne2i9G?!WEYGU+e zM9S#8VaOeyC;K-(CQ_E%N3TueK`M-fhifllFR3hR7$*#}20E@|edj9h$-teuwP8 z)Ey5QZQ)^nZD)7!cd5sErtb(S(NlK+*0HU1Z&Bwvhb}9ts96THR-32?z8f?6mZBSW`U&lenJ!qeCjr_BBHtO5c~k-#Tb1&IQwF(C>`wi&S1 z5~~c0_+MK;KR=}$?w@vaI!!COZ|DLUMmu<#|^Re15tsm@v z2u0{=_a@sj3tHQ?f~ZWY*p=Ng_HtG*jE;YKS<@J8)2rhB9G~U-OLd0*s0u zkxGWhvO$F@op$Tqx8>Z9jG&4-ay0@d{G%E6)|?}`rOgRgH?PWGu6aXgvqLM*`LW$t zp6Zr*m|i`H5Dfr)j4=@P8Ad+m?1uUb_j4^P^tm~Z6J7o zA*FNUHrf^iFgLN{gfpL1W?jdo0H(M<6d^t>J2- z!H9@HgBZ-GrAT;o;%;^N+KXE>80DW?FdYP@yM#rb}-yJK;IMb(h z;CLI`C9SZ3xBuafM*C$aoTK;a!|TFmuR;s6mQy5)4;_?hC6n!nuDTX2IF5d* z&&X2;AL+%0Z8Xa&0?*jn>y~nzYt@V&YZY)lLIUvbQKFb%n~Z>v6eqwJo+@kS3T@uj zT=N;Nd3&TB9B7rg+K$GAx9Y=Iox?6=TltS`Ed-uQ7i^y^JK!%Ju4iAL`v?02;8~z#Pw2 z-kfjmbS!_Wdjqdr1|Zn{eELDRx-Qj>;Kwr$@xZlT*JphcyrijX5s>0AD;wtMPei6@ znAU()*9f?QL+vCq1ZML41HjDk!E~&~sXy*K+| zVVGVNq*;Shp#48JGeHUpxFd_Y?IF?Xh!E?*AWlK9JlQPx~)q{}FU_ zp4a-E29GNB>00XKpL}+RF-R9{cT(1HOzPf=w9^`Ey+H>TTSo~EeZxVA{0Funomzw| z-%Pdaq8ptq|CQYg92v4mN5qn}zsq0hlkA36jSAb=6Z5O50pHk~X_|<7M4# zQUqE^7i9%G(n&?;{ttO*FLXj?lBL$7Gq~;vv;CzXzxy=9Otl7Bm7Jld7&vfKJX(3X zY!_R9z)C`G#*Ga1V1l6lsfQY|3Z?700nEZ_sEc7`(fB;BR?^g;{jf5MopFt^9$ot{ zn(C6qkRa~ENzed}B6Ula%kbxvRA)8G3Y#H?tBTMN6G;D9ScX2oPWqNj3RvWBh%R)n zV%*kp17jv|AX3eFh6EsL4n?q?E(zfuTY{KD78I`pVQpzeX;OTr7#^<=C&@dFV}6BD z|DwGgKmSWkGx#;+(d8*zB91fzD3A;oe|IlND$S>qVx50|jV%DI6aP6N$TdAE<<;QH z`P`Ifk&{93a=BjbX2@z^XStik_^KBQ%~OAS9~1D}L8zk_!-M0=i>m#B(lC(;qS#c> z(I*6-7@$w>Nt-A(rb@vsrdAe@F1ZZ3VY}M4;bs4kSO_@*FQ+})F#su{D7F7igNfTy z^=P&FE{EZ?Yfg)3*sSHyK)zjnBhL}%Y(Frs46e3x(}xp#!Tuk3uRHY>QC?)Rll6to zIgR_(PKb_UN1I>S#;QwPE(X}Zeefajx7x{JSQjPU5+Hxw zH%IiEbZ_gFSF7n}veM?tz)th&m|AAIdy$VW!`zCw{GW8j)T+qKPtT z+yuBTk58V`6=Z1q+3O6z>(-WCB3|rd+|m&s?swnI-G&`HYj3fG%VKOS^w`#S8(W|& zM;!nk65t_Xv^Ww-16anCk2+Z~qRE|-;A!zuA5zf=SRyHk(VjQ;NIu|Qfn1Dn9Z4a? zS7y;cH#=IAFQTYGQkS!Vu|B^F@ADK6l{*fQDKpvWa+_;`-ZbSu*b$&H$&|KIM*wxp zlY8D+evknx%YN6*1@PDhCQ;{h`191)kp`_age+YE+hE5`nyEEFC(E~OS{$Vl;wf}z z8ukwcMd?VofA@Jnf3BmYtB{UE7Jq7tE1oGd>_X=l5FB8k!X#q?==KUq1RWy4hc=*R z1i4L`0SnX>Cjn44hk`O;ku0mGHppY0Q$Xp430OXkj^~uVl({#aP5x4%cgAFcL-`!N zpXgX0=e+5bzSx~(FoV($3VSU;V=bMvdJ8Z+wq>P^vP)4Kvy#PGb@95c#D9L6k2L@k zGf)9ZF+hMDFr|isN;2rg=zTX?QK< zJ?)H^BRSNl--yZIB1Yc`+av_H^j4N5Q0qo-VEgh>e^+pM0DSHou1mK88TE~FzRn9Q z^jTm0lSfq2agGKwSXS|x5?CH_eyViQg}{-GF0Fj#Zig5f8>4v%C!vzQ&xe(>$xDXJ zwSg*amTH+BAF!p$)8cSHP8dy!@_cdnUl;+^Im(YQzO}ivb%^}*{INNbo$A=>*ca1r zHgJhXG>fM}J&e!F?CVHlly#1g1++zs97T2{_CO_bXU$pMEXcC}*@3hHBEs3BPvZ^v z2rhZsP4@ag3OQ(h!G4dXO738GyA%;-@u{!+$sG;fEn1Z{b^mk2k28upWuOQ4Nm$u5 ze!}%`D}Cf=>!5ngJEqUn?%vmjp#PS~Yksq1@&b}h>0}2^^`J{oo7!16A<(N#pfdq@ zvne9w{OtN0+Z^6!TUx6}nV|c$__^IU|=b4VU2_b81exuxada~i#N+Z;%uT? z1umyjpuQB2iEQ%kwjwGB0BHuxrOuDaX&3&eLSJmd3x9pNCOM{nV@6y17{j`5cnIKepKdeS$)KA)e!;$`0q}|D8(e%I z5y?p9qyvv^M!y=KTyZ)w!hj|l%KCb4zkzD`B;5>0&sU=3YIHW_B?UO?mlp67gR~3d zqXdlt$UDr$eF#$ST)yWJql;rLzY5 z!+JkFb72dk8g0?G#r%66E_{V~!wK^p!!$NNmV8zv-!>F&hi#LcYpBvzB*~(OlAxtZdccxuuJ$MiORx z98h9c&uE57w&EVD>(5U_VQ~a7bi2~AEAJc?wTuYz;qsq-JUbTYBK9L@^(dA}1Bc44 z6dzG>dhv<+hMgD`f*k?zmU61fZLD70nK{Zp^4`Flx|fen)v=E2139G$*uSL;?!BG2 z0D;W_!L(@32^<*Kiz*2O zoZsP6gr(?woT6)epkmnBEHa<=Wwn*NGUg|7tqyXX{0OT~@X-JVv4h(2rN^<^R%9c( ze*Z0Ocgh^$+@5X$s#B2a#9tt$m%Y_PUnlIfW4_Om>(Gzrh`t7$(Xreob5i7Gn5rM@ zHG!33=Z@5}QiRXQ)71>xhP9-a|5ILK0^@zskii5Uv0YyUsy+A$0kgWp;f8`3Ucl#Z zbSng;PU1@b4trsc1K_s_;bH#&+VC^J=);gkfSb2}rWj45PRthu)hmxh3yIaU(+uK;{klndWvF96(-q zHeFrD0@PuJ6m-mAJTfV$@y@r&WUI?#x|EHrS!r4*&Y2dsAkyeA(Q z9UQcXa7e;<-k#&PKC0O5B*7{uzXT+Hm6wnhIn);veN3UQe3o(_C0a7nO)9$m& z>u4g~@xSSeCeJ0^oNVUQUDw`a@%c{=I{1=~pypiRo~>s)&~r|6SQXg}yqc4Y87TTz z_Z^7j-&Idka;MsO7f-7_O_E)vL5BZzjh`wuk3Ht`B%g=CY9cu)1RM5GU=hb%4*8-V z^RXtul3X4ATY^Y&rZzsC4zAS{To0gW&a=;fD#^b})dg+N#`LbY_xm^5nfUSs=%c-{ zPrch6l{4-b@=AZC>!6^FwdFwDL`Myl?d5O;D^$C4puwxnz)M6NTK8$)pVYEWM=VX8X?^yW=~%1HY)VCQnc(Gq;aLKsuZkRpppBQpliu}-l0ky z#bZN^vd{tITOCdQv(W@<00SYGR?qSLi?e)7r^rtqOez0CU!Tz#=JZ%6$EN)`G3nj7*lEhHk=o}LmuLV0X)O{4csqiowMcGsxa48Zlr+t7yXxP}JL~-MzE)0slYz;p-vVA2_Bw(ZJ(rsR;Mm60pX_sTqVYC%$}`nGW^Q6^ z6Hs0!@283ILC62jZk1-0_Ol1idjsL&hnvIaj?PwCL%WC zB9sg+M&}zfMZGC+7+803l8c4T{H59U09Zh$zpbmRDAn*-pRj&BB!xqu{aJZvIx`gO zOPb?vhAb`Bw2kN2-B7!eQixR) z#-~S&h2N+7&4*F z8D9OkyoN!P*j*$;70O1-oVa7*%KypCNM9HUZ`w#=2r!6pM%;taL;p;>{)4j&KD_et zz+dt2kSDGGUgrH?2V{4{cQPv6n)3G-AbM((b>S%${iecESpquhJQ-K6S3M9EQ7$j4 z8;$S^m{fiykHM7;4irasOSBi2e)9(uQ)Go-5K`J|lOUtjNFJS6h#Tn@9)YlvrCQ!Xd6j`x+vEn&%PoCrOlF?V zCeL}G1|`eACLdR4ONJ(fJaTNg@mD*s-AXJ`h$yW=4z-QET-;|`XkRV0m%MW|JNOJbpw?7)=I6{!)YHJ5%EUe$vz zch0^#%ObDQurWGiGqC!oe|;-AsVI3dM&|@8%<0uQUZ-Ssx;(SqgEqvl$bJOR8}VmU z)z*eVZ|VnNp$I7=w`~0Uegu!;#B2Mvw>jh0EKyg%I)K=gZ*ES2k= zbQ=3y`3?v<&>V%0H~(mIof$FbipJRF3OL}1-LOjC(w0Ci1k75oak!S}Cj-d1z(F9a z0bU3WNxB;wl~4$}AD2>gG%O5EPAF4mdt`xVg1}L*H*koh`M&AU!mrchWYb&4W20P5 z-vJAioxV@kwYx)}Wr?^}d36+ShM*h2PgCu$IJ2b@b+jNBXT;4_TOmxRqf;CaNKmQks`TV{9C*j+MO$7w#~3})EV}w=!r!FztyczGP+ta)8&A_bx`clG5@1*Y|M() zt%=$nSi2gCQ_>;&Qu5?tBqmy3!~|{L9bbH(={nczna!$e%SH#^9Wu;W1KLtn)e*Om4qO1H>Q%@9^K|F@$H}1?Hl+t*qmHDl`}?|{`M?nwbcT}v zc$rY5M!x~zr$##yq8yWRr-A0g!IFlZ^l3Cla-lppNaef#OV?o5+$N|77_$p!zVZ3w zM0jR3o~5GvQ<@-+e&F0sJd4jOKUaNBh2*0-VQ1_{$NFCB%D`Yc!a!7x50YK?afdt2 zHpH^ukO}W&wPO}Gf>dqtXW0=98B^GZzC247VR}+Ra$da5-^lQ)Ye^%ZlKm^JT+Wzh zJ*&Nv3p~X))z*SQkrg!g)nq(c)orXMk0CwdIVV zTB}G?_gCUf+fUQb2Ej!UIr@eT;R%DqzLEhaYd_Y?YIrR&2@wR$-q2P zBJzzU(2{fIGi@Q*7xQt^%~!=OZ=j~m(+J+VJb!Y%>3#=&Fa|doNK`^BIhgABQS9iZj#|)5w{a-i(6+UnLsI+Ec*}1Am{yEL1z`r3Q$O1q zr;b;O2XR4(nUKu69Quw5QRH;mPN^G+_3ioiqx;veT_1I6Z12FtsT=bro@?_kerGx7 z{2Si^Y`ix0e6K%D?yJ#cL(3~{V8gRP9cZz(bG3HT$=UD+#1oG!uwHu! ztgG-udPlbD5(yx0r6q$hb=m6=X46Beu@*wcPuko82uXVeNeaJ2)K*CWq_Yvn9NPoG z-h<@f_pG`4mQaUTXX)y+C(oO(4(8*e&x!W2j(^E<^n8_%0nbK{jCyvIxm$Y$NKNgD z96@EL01{_GJBJ0Qecl@2|>;FP1%c*s7k!alKH@FdQed63i%2 zljo=NaP3>=8|R$!-tKR8UoeOlDOWdno8+d`@+PO48_i1b8j*XOdTevL-?3fnfOur3 zT7OYECqdMj2xsmV@fQ)iZxN(pYBD}!>_A8!`-o&QE-mMDWi>-v`-&~{j4FhUFe&X; zyTRtr=UGc6S0mcsir%6X3mwC;W+zUzH&ytwSp$zbKYt+4(kM@<-fpZ}KvVm!=d!N? zFaz<|dcFKjI36wcYh%4Py51rZM};AJZ1ZTyvSb6(rqz>-ZEd}8T4tOT3SW{VEuz7d z$jT$baX_FXq2t=@3>0AOI~bDec}ZGPF6gf|}64QuWEo^8XOnl3-+7 zu&U!@1pnQ`^CZ1vYy>3{e$S7HnOj!x%r+fP@~Ar4~M! z!23-eWz#T2UD0xHaw0zE)3>~v{7?6v?}xcWfOc~1p=Y^!@5gc{Y;(B5q8*Y24SIeS zs5ZhUOmM7kT`ca)qf(mA@tTG5R<~@!_3#QnS&Fcv?_(S#7MiHlR|dDzHl$N+A#);w z&NVlOL5`&JAAN+wFQ=(#{Cp~NyszhS*MQiiFO$wDF{`sa7dgwDH*w@yYIhRNslU^F zby_B;Yf9JwnMe#UA=qUI-_lj(9($r=R|y*|wR|vVyt_Q!+1}6AC)qA#II@)zt^wdg z;>;l*a~X!eHYc4<7#(w-)_g~>6y`04rT{KY_X7?~k{tPdsF56z&{ux^Bqgc=tUiPp zv@A`6b(vRtQn3AdSNxThnenbdd@*qB(7XwBuX6;PM_a0|ZJrYN0!ovWBQd1YRckgP zoN<``CHn5XBu!Fx;szOHon?DU(?m#4Edjcp~ZWD--hYZ@4#VN-O6t)|Htv$ zo&MGALHFG?33t z@Nq2*XIS$k5Ya{`04sChX323Mtsc*l6G55YCR-N6gHLPNYw;`{7Yo^l>j7+aP|tes z23&0TesjJ*Nh2_kS^u7#0nYmuUC;GCwQ+oZ1c8cAXLC#I@bu$6-W?H(BX-bx7Hk_K zsyLCNuI9_iXy|?w-p=#xJA-XX;a8QiXYvMfe zqECh7V99^%8Z9KMAwzWZ(X9XQCw~w4v~Zn7C81y#23yiwAanYTdL_b5J7kkwm9~yD z*Ns~!vvbmW9?M*z@8l?~f@5=U^8bRN#=h`7AVz&tFE$ea#aqssiwmN-fk;t`rXXWK z{-#CA2*5s=Qq3fz%8b%zP(`pHh+cuJ_&H@s&>!H)_{?vd>xIyGdm68K2-BtMf?J)d zG>8~_06q;eW2mZCu-N(FwVf2~-_?(*$bm_UqAWCiXjF7=^KG|6FA`E6sIaX^N9QeX zk+}>0&2f5b)77p1{{F^-Xr8PU02VMBDN_UYI$sndeUy(9k*8;N<9r$Da;q&=AFp4O^!*&3xQZucdg%5NG}+*DW^~X+At?Kw2gE zc}lMi-GVSPtE z9S`&Ak{FwH`7cU-(5!J(*lRxdn#@vcX84rHLKfM}*j_<16sb)-`jAOz!w{aIkUDVVen!G}bj5P zy0kdN2OhdPw27Oi4lg=ZGkOu+!Ac_6`ZZ%w1&2Id z=WES}fSy}v9{hSC_=qIA$som_^I)?|-hqHRpz;4QS{vw5g?1f`LD2l5dVDf}ud=H> zWs^Z=8tZK{&T|Zd>GMlb5oJ24DXRjo%?EtFF!ZwbZzDLz=hQ9(pQ-L-bfT?0Pwv9j z=X9W7{y{iSDGl)<9|Q$m#H3cmdpQgXBx^(|BSITdU>^fTR-q@Y05a?d__$K`^0^I_ zbV4-v#)57`f5oBYbGaFXUMda{$+xoEF&B{lg=oj>WbsUu?{3F@@#x4T>?ajngvi#I zh@>$o_Xb&zyTbdHPZli}{q=rsef96Pp2&^H9$o9e(Uk-$W*aOdJfZS=e{bM0%M_ut zfdm6@{~ft90A+3myCvWTejZSudpEOav?iP87yzi#5ykSo(d*&bqJs@>9CfLrf^$9Y zj=+-tDt8pU#nBNw50dgP9_T^`t1XcLWNX3AeVmvhfI3ml5sAD5lyhc&E%#-#13tiw z&u)BkvK_r%=gCjTbfWPF9KEw+n@9RC^1p$?KyG@Bjar5!(@AcAX_+C zN)M*~3W^|1r z%GfQzQ2d^k`-LocXLv3HbA{mC5)U2~8>_$iKR=IhU}-SOuBh;SiWX8RtvU5$^)|<7 zf*%h{egZs5SHL9taXY16fb{9#_cZd@$ojjUo}0ZIj)PPGiTpD`AtH4*&xfPn;l&$S z#ZgP}H1Sf((DNf|B!m{2Mi9+Y0uy!^3m7BV4It0U1w&R->K*2@X5YW@^3!+r4G1X^x9 zdCEin8%X-rwoGmA_eiG4?y>tFyI|JjOCzXc5-)H-8JfpsBhb&9zjWRgi`zz+I+H5i zeu#0W6CVc6X`mq13ZDrne&^Tc+0BBg)nTC1B0!JebM?7cB0!XD*q3l7ER2SkO)jwp zhq_~r-IL&36&Cq0r`f>1=AU4O>H1Aya;OsZqKNNcV{h*S_GfF5W=+$&@tg=s^kmyt69FD zVeEDB$Kt=o_m>_u1F%zKjOgFWCJr+h9F)jx3}BMZ%M$8rubQwhM1H(Pv{*d7Fv(x( zAI|?*aCHMbm-a@dV{j~bv?VL$Co}BSmx*0z;m=OftpdT!_-MSB(B1FuDh{c*39DjDkI^X5Iu_e zKR-$~4@M0~&vt;vbCj}$Ir?=F%X$Ov#FH>$5 z2!0}FG!8f5)%))EH(5)=pa5ECbHrDLpZ{)=OvA3wl;*W zaKNwCyth&f)Z~JmZA99^IbCH=X5Q;O$^GBJ)m3)&tQVLEN*j7Msa^iNY_`(N{>Qs+ zRHgNm0bYUk5oNUQRPzEGuc*JwMtSvHP*oLyE%a8?QvVE-puh~B#!lWEh7~L1ZNw4b z%JmZS*@Ya@U31JRfRCbtql9r%5FD2DM?1`~@tI|aem_(2G$GS>q?D_(9__c`eAIee zXg*a^o1C%ERZhLHV4tdlj_D{@zPcyJ9S;A5!&v6xHN2tdwf<_XiF>@BcmG!=mnfLf!r z0Dg~P=mU_{8T~Z&Z=8?6^aB9k57mKRO#H1iDg(bLTLHxo54{55Bu_G&kNQUE9??&p ziC?t-7>&Uw%3|a^q^c%Pg|TA?TI0OA@|GeEGjv4U$9#~3QRLqw&V8^;+DI3-j8mSt#41AA3BOFQg_5v^JNH9=L9=B zCO9&cu*hvX>*?oDa1v~WP4b`o5IV-2fZ4OC|JY7z;$O8&*ljtbs^8Or6%1rccHmdE z@xRQQ`U3x)`20=&uXd&76?@x&VRwW;@v0}S-k4%VMXPRB>@ffw1c10I% zBi!Z1i#YjL>=bJ3+C%3Xcskah0)CEjtv>Sg)RAxPIhSx=gzQ0#J>M9~$CR@Vw7XQ9 zO4ufWtSXKrT0B>2s3QV{w-Doc9k|dOmznA54cI#-lvBF#9`z!m(T|SKiN@^gvpjHh zOsMkR&)d{Xoi~S!^ZXeQD9QC^zhtQ8?FM>sgXWPP5lbd<-iP{JeK~VTl~6az5!P!!`b+$@t93D;Zc76hzuSo;+ zGX`lf?WNTLm^kvw@07yW+pNsl=%D>xcXa07K#9s-*sOgLJ)bxj|BJlqxD?;(y!~RA zzw)6hxLkfjEvzo6Pb?GPeV}+IRVWpGtRP$-B_fMglMk-3p}~`66*9zC07< zNlof2t`{F=AEn(WvcQ-T1DS&>H^xSMTo&2#41H>JrDB$^8wH9JiHNhyTTTPyUojuq z5w)E154)%Uh@HSj>zJ=&S+WOOd5gaD5sF<`*8APIOzEbZ`_4yR$fZH~s;`^grCQaC#v2$L`vq?_OD8x|ALT&iI+davjkOq>G^a=`H-i2$ezg6@R%|%vnp)wi zd2IIvn73P6?O?w@>B^$ZMk##>r0JEvKthp#^5_3xlv)s z#Dr{653aS3W7)xs_Bf#4jq&=7SMO>(HzLKRleBp>ig-V{-{g37BPN0;7s5qGm-K#R z1f%Ux7Sy&?8xdn_Bf|lTV>RN=z4y=2Vpj~>wpfi=_sEbh9x>)%u3ACA^<9=1Fm&us zF7>_;4yttSYY>3x`|aM|UGi7GpWddnXOmiabtO{J5#`r2eG+r8<+?hMCMx?YKy#~H z!Rt^cURUvJw79l*BqmjY^PnqDk8CZ2lEY9?NHrszRR%oD|1xIUB6;I%(+8Aw(+Xpi za_gWd%e_OrH~v34CObHRe2D|`Q=@Y2uNPGjd5g^5=A_Tx?o{b9?;2pBVwevrXggmM z?QLu9h_{Xrl(8yq#yXwkEQ3o`PK?|APX{++BhvbNRP{EeYu~|boddJZg6=Fdx}u%%1rlhVv({Si7c0f3i z>Wmr6O>qRnB!1_^uyxJ~-@S_Pz9k-BHGmVx5reXJ#Y)@P&V4p0`~xec@PvYqiU+aH z-l71lk-a~48KwFFTQFL1;mNrH84jM`>)ZWPFRPhKHfBBF6)-BV_b9i$gA50V}~J*fw_^8bWWDkSus3q2eO^P zXE}y03ta;x0lSf=is$KT#SG)|iSn%tUa|`BbtU~$?~=EHLo}!-63_E-0*~C^^nJRX z$dbSj#79ct3y(1g?Z!o|XyqX@+K?P892j=8xdq+tHKP3%1ofod8|0Ii*e8x+NjTRFr}N* z@`XyS?cMGTZL$+|qqEzV@_8Xv|6w4NW<^8MUXh=h3`%RKSOnShVb(3Qgsnlq2o71w z%R|(ogMry%Y6R{rTfI8LF&5x)5PuM z4hYWES%P@v0e}%Rl!lb~JKgOtNQ=>f@5Kn9xQF6m^nBB$@zYaBRDcWujfUpfh1O!J zjR$S?iSni=XNI>)16x^X%f}ZHKkw9~BaWXqjD)PKM-T8CV7DDG)nNx~1FZ)LFpHaYPOx>ZkCjY3vMrS^1pC<-_fy%^z*|I`qQ%M5CF1b+;qRWdc zXsU#LlI$!aa@X5qdxO5e?QV1+KL)V$+|SK+eFLtB4){V6LhP6%oB`SJ#xm*t&k$OH zrYnJ{IEuTir&Yd@u0xpjK*Pf4Ay7Po>^B3-j$)D)^ksp~?4%h)%8Mq79tS$}U_#dL z?zK-c@6H(gbvYuCW}*AMQm9M^r&jEg-h(kGzC7}YR=qRvp-Pv#UFr2UZ+7PtL}U6l zNmr3cfKGB%@(*+zb%xIMd2W76(SFP$zA^wCiCz3{q&0e^^SO5r`8=Ara4}uLNs+3M{3lr1f@Cvf^^t=!;s6mk=b!?K$U`J<*1{i;{p(blO?GE zG^2O1!>XZ!Eagklrns(fr=-yQay+?!Hoh-6ewHgQz3J^abG{t_>STB1>>$PN=Ea`% z`}{eQ8BUKcMv$)`fy1x~D&f#dge0LPf&p?Y>_nh0?RdK-S^NQRv;)vq2B&jUtpv3Q6N$^R zdN(2XEYU^&PwB>Yr{%_aPyA4MZ*#e>HtFUBg@aM%U**EeGGRy1cXc9kFOTo5$brsg zXBdO9i5 z04+PujrBP>i1^;HfCn7pBO*AO$^$M-8+?t#!xjwbUxcAmQd;| z%P)K8uYgW4{>+*NK$DomaG89#jkj8JVd%l|F$ysTqFwmDbW>CkpG5Iuu;4|+uXc|nDv0RyQVQLZ$1 ztyAvh&I^sv=xvBoTFSc0fAGs1g;?S#L|Uta##iWmMj!qf_;fM^Zzz&52+@KMToXuy zMG+_GyrbWSrFEXJI`~`rk^R`Q&JDbu>WG+p2>RudbPHJUXE$cA4ojtx>^~jDQEIm$ z_g%fRmR8~+TASpn8bl5mL@xZ;YIm}y|JwZhT{8E}^7}(PX$6pF%fzsM-+$vrMPaz; zq#+ANOQbi#-ClF1uqo+xMD|7g)iKS*cC6{VtgD=D!KKon9}$|t(oSHuA>9J1&-YET z-)TX;qn#VZeX^Uq?kTa1V6L|G%kT)=`0vH0!_7GV8bc15+!l@&OK zpn)O^p2uv`84;sMM_+B8R~|p+>gYsZkl%unlZSn(vvK)V7h;^Z{ z0F7bSYaM592t+7aJM75 z^mm-Ef7p5PJ1wI+Uu%MjI{h5fdW0c&9Tg6ZX*aG~P7*uNdt_k!YA$%u^Vh5#9P*p9 zsdDGpn^Hfg1JBB(?u%hjZMJ!3&T^WF;@IX}`oy{7>z;?M+>uVb$jXoaw@K#x?mKlA z<+-T2KBt?q+ktQZfZ>)C@8zI>w+GB!^CmBA&wV^0k2O2(sgDhyXxqTD9D8o)S%?KA zHHt;8#^T{zIBsJ5G8NV1wk{p1k{|yL< z&Si?-VL7t)Iix}UeNEP^KYH5R-R!@RJT$3LI@SneB?cCxojlg44O2khDmQGv=b5Dn zyN6@GDiMSd0M_hB^AMTv1`WJuOez?MeH>hTl@ZfZ%6)#x6} zri3ma8gf3SbW-M>zpU+?y|tP2;yP5=)p&HHlbI>+Y{pr0mSnr!^k#41a25Yt{$HFK zHLJ3qG$17hRFX=A90-9Q((h_~k}BJMbUT3>*PTB+3`^Sp%x1w$&AED{2s;-Vbcvq= zP}Eh|OY0n#QIO8-z@~u+mNIq8i(C8yiZl*$;e*7%SZOtVqLMr(;ryqJZL6hOizn($ zzut8AztsB%T(LuYx1|VFKI}Nge z#g(U=FU5D&JgAiU1iMl+mHQ|Cx@?@wwecD#Galq8oD&`c;7si3J>q4cA8lo*OBwM9 z?<0nj;k)Ek-38_BH2PBKlfV|zPc)iGuP|5Ey95^r0KJ5Y52K(ZVjEj-plfnOdC$;pj8uoboF;zLjg)8?ggk91_P z57H=Fsr-m>Q108jNjPUke-J%9?s&$i0NJjd6S?EY2 zNh|}=`NlY9@l@0Y*FE%5@QfUUGCkRez|UVNPptHyrG^_i%8KbCrz+>H^UeuNAdi0s zC-SxFtifiNE2}nlOcy?9{>m{WjdOcTvGrY+*Q9cmB{F8pZ`mS$R8C zx?)Xa2{99?M#FEE{&@}}%Ah1f8gs&&*H6C|!X zFnlzo1!cogMr2ttilxkts`-W=j8}^M=Z;4Xy0Rm+_xD335wWu{(2~Z|=}K@QuZel8 zgMtb&YAOm{KI2m@hRH_mnZVAJzglQh2l}rw_WXn0ycG(HcV z(M=p%QIYfp9$g;0K)>L7qqo30Xw;%$gn?>=#5BiU^^)6ZA7|*b%_8fWCsFqkp5lLV)WLxVCO@D&601CVP#jyFn4$* zy@A(ZGqeZHRmkj>?G(0Ya!g@^-*-*8y%|e54F@^sd|vv~iX+~fk7S^@`o}cWbJH7R zE2_H;Nw)d3)o9yW_$tmxu`p;SSW{`~0rr#GeikIt7{}U2i7N$K?;b$(uR zsn6>!d7CnJX0%+#cQ-H$tlSA&&yo0b?s}jqTnzlE&oeeF>yPl0A+p>TUww-|46?CK zcy3z$68tggU2u*J^1?SqU^elxQT_)2=o4CQAn6rAUGnPvd_F%lGBTFRU0M$~lHJT){2bdPm21QaF7av;y zquj-yMm2C+>fl6!1saL3J59{$&3TiZ7;96H;Gn;t#s=2KoT#|iStkzM(K&X93A%lMSGAYr3T71K$dmil6fPJc4)>}0)Q zME#_R>qpm%zV6nZzYRUE5<(V7%t5;Zrin2+ut?*<_CuQLC8tMlB$B>JxY0#lt3PMK z%lLHr1JOwx@yG@{Ns_h>@^8GCPxAk?6^`!LdfK@&9H`9G?7i}KtI5j#|FX^Csy@8J_;^dnd*Y}Wvkz=SRw zP_zlO4N*@=Ou<^!BX`f&GJc0>&gwlp+aPca)`Yjb6-Y?Kd-~65AW!-E^m;N(?!zAe zq{0w_*ZnLZ0hm_S>4DLRV_MvaIQUw>M4A~9{jxm69O7Bh3)ubE1NBOBi)dYqj_k}- z1cU8xS;LxGVV{i0n^HJu&gHP4=QiavmHKsu%94kcadGG2&oNfOGSwL{!{JO+6=rAg( zAaxlM%`?rIzvjf0q(dYr?$h^Ac(1ILvhr;8WKOCouZn&IT;dw9YVw=*@DxCLD!Qn`z1P1KlljEY|_$0xu~;z?!WU#J>P`vQPvJ zRynY#D8xB_I51s@pM1u#lWn z^b&P%V})qI*|Cuh)ztPa~7grup3IzT?m{i zowO2<6!H0Q_u|!q0&pyX@I*Z8mgHICxO-llx}K}$B`C3Fo_WeUC1H?K*xj*OW8M3b zq{$(X+xn0>Dd}92$Gs-N?GNoe%ml zVL-g@#^@_B4zLWW@ZF3bkn6i4`>BcYS)5@TW)pE>jce}+NPjsNi!m2pdQ{rN8F5>L z=ocH8LT`wS8wX8AuY>$s9=CKeVgPh8pPFZM4gFa@&muSLaZ`pqzgyk}#(Gmh3R1;*v zcn&OHG||Y;StzzhMM^Z4*R%pFJLa9ztIiBDIq>X(!A>^9*A<1ns&@i&vy4EE>DX4t z2DMpiZFAt{fUr3aI5mDeHRRsNk;cjC>k9Z zI{l;*Z+SYFH?t3{z|`P(eIa!q${6Hm<8+sull|*$Uuk*6dY=8m7*=^Y(GdUx zAJ);;yUJh%nG#i$$6mo(%s|{-%=5P z51o--_8Z_8JR`fZq%!JCJ^77+j)c&Kfq`O0pBBn+br4RfCRhTQux)Xj8P=U?Ezg8h zJY|x~KF6{;P~k_M;f&-F4@(Yx+RkWj$|Q6_8C#eCvZd~n(T=3>9Mjyg{Hy9!F7y!H znXYkfTKBhli*y+|`6iE3KR^NT$^F?NgF3glQ3$a1x#(>4eQE&1$fa$tPBWrt){rv+ z%2FqQ+OX#ChN=*#OLHV)msGVsQ^z`;Ct6Dx_>O#*UckG$*(e_fQRibpw5iBNd1DW3 zW(EXU{v~8L`t~eKnyZrrG#T@hgM8KJZ_e$cTTgO!)Ab54IA-p27I65X4eYdf;AL#L z*la=nK*)zN$UW%Q3L9j+I1B@=-5xC9^vhmq=vr00`#|bqD{%K;w?9VJkR3AGUWL8% zzX#b=FE~V*n&4g(K%ZrPa-NliB#P8tY}ppgW9l(XcPf(C>4a7iY4I;92VL8uLO)6t+p7~A+kM4Q>{zt(#d6U)q_pQ9js}1DUUcUnpiVP8#yo*I% zAUhPHGf^G~QGYH%a`1(MenHVO5{|*(q;gjVhfvsTyEsBJDIG_Bi~!PDn6M#@V_~5* zc$Y+_Np-#lU&{36F|vnd-yT)fm|R2utDQ<;G=E^oAx(__X z!<2WcSME>pscii0+9oSKO18EIhB*~=PzshF>q7gvjD_3~j>uz=68hGi8j9SK@>89hVPC(G+=MjO{@KF0P zFqA>*9Z`{KRJH-aDm3Idu%=`Y9AzY?F3*r`Nk4EDK21Dlr}=wxdb7XJ094pil`|-l zPx{;C+iz0-^VdoFe!lb^3`qOW$I=J7)(uhqOl!RK`jX!##{)v3EecA?V>&8CC>#&# zQV4!G8=ggl9a&XCRyZn}<#ZB%qxsM#9!Af9i0<+)bW%oZh%MzG_t}xKv~N%2YwXe! zZ4vbh>G*P!r856|#*gHbiu}Z_g}wFf zjJUa>Q|5mGK!MgYs7T)+jB||zM3id_)U7m_RJ;Umv`4?pVN&H$&=r%73F^)X2wDG# zcA>+{6#$}J?#I$;kyIAq>>mawniY3!l4K$&9X^GDtAkT{1sXlsEgB~@qn*c()S7K&Z*>Ytlh4Z0 zT_N`gy3DE-n47~Nc6!Nw<#vUgZV?>MTD2wO%YJ{!z>~=oBPvYeaU-CihXuPHDhYg& zT*zTxA1j^om4y6)bb5}^;OA0uW8v`*^$al$Gw?*XN`Zkd$Rw721vQbc@(EbQ`SlkJ)A)n&FBExU;zaftJC3GPHfX-YI zQg!I>iZ7jwwZswGl|d7(+t@BMCUzacvSf4(gt9I>V>^ZJT?AuTFPSDA)ls0w0ABJjH@-mUaAT6R8awb{m8HSh(KbFUpAsb#ccG0{qR*D)t z>Oe#@%37QlqS?yMp$f&0$br==kj20=oz?ELC9{Ypxyu#fS!EzXwi)M*X?^$5vU7DQ zT6#yZgR)w)rEVtqf9^{$+O;Q_y_4)n&g1ua7v@;mGk_{Ea&>TE$htI0Job!mEzE3K_NLCjiW{VFlKf(u^~qxmqNHp1C0^TG611{UTk)EF)lK)imszS&2|Jwig@hzAJMgyW1C#4>f(To6kUpXgow+nT0rq_qE%_TP2CfEEAW$t5p%hTqatcTFGmh-EvQQgkvCYrKB6JK$^z&IW)jpM`5wKWn^M}_NaX|6E6 z4bPJh@h&XuLa4W@n7M9?5?lGEK}|FAkOQ#4dvOk+;`9~cjoMG0f|AyP%MqYV>HnZS zYhAnK(f#RrEi~UgIVQF0`?!@gu$+bXGzQP)J|1lJ%RI##x)v12q@qqW7y@e`@Hz}f zr@SGRTGkNBg>jLTLF7s3)(+gZqm4FtzR*` zNY;Uth8Z7WoNr2RO5cL_EFfP1n${m1oxeW}lDe^yf&VYFd2%+Ua;L5Tw|cicu-+C7 zk#KCZx9_{te|J|9igy6Rpcl|~OcwtMfQpFkz_3o$3e=_SfUDOHG0M>-mWiFmIFxSH zMOc6TEAx}!WRdXSHQqcI1`qNtc|=S}j*CiIsD>o1%D>_{u5#Q=HXWORF?k0l2XHdg ziMsNguJ3J}>YXCS=LY5LzTWi6H#%bjTMm+(cNX`pwNR>KROfMw3Ea5842&bHxm#|| z0}iCbt2lcV$+Te96iw_!!|`3R;;MgH1TC^u$Li&*?M!Qx|9w%M)gL&N4z+ObScUzX zkpc?#O46?ow&E>?@5N;PgHE54V_4CXjQk5vs=mtABpW9j$j zYyTY(OC=P}DzqOAzXp0HhOf9&i}tU;rEl%!cAozwAd;`ur6??}ivSN1)7nq(Rg8t% zhpyISCd4uNUv^iU$5lRa*b=x(MeMK^BxNGm^3Ghz%w@7`{vq9r&Z(Y9W zQCy>CuI|qsIZ*WDQ7TFfgtl#VBQ2`AtLO$4_K^~1=p_zUB3L4 zViXw+c@y*bVtjR0%-<%v?a0Ln+nhg;0$ZhhPp-c+K6mt!(i7Dr!dS8_Z8msOKlpi6dT+ zrcm)Y(%dzH{E1ZmK3P6??|%bpp^nnAM0cpRV<$QFISkYn8;z;Gw`l5(zHjSQN3RP;-aj=tf;m*)@2jK(4b+Sk#r80GQ;9|ZB5q8P z=dFY!x8J7@$B}W1TESc!?zt(i^;!#5Hy)~}RLHrv08k>SgEGYT1tYk#>s13%)z)NJ?4IwVH`rsA>bXsUmR_W2&Xynt`$2_Z# zIz9{-9<<=oAR+*WMlO1o5h;cmf?W+*W+^>y5)R%MNpB1(Rhja=1Z_IrpB$Z!Jl+rK ze9L#MKIK+>OEbuQG4G@V?gf_!cz7tsUSuxGlC4kqWG`Go>iI9|k zO@**XKJn`SByj(9Z+)J?P$jwdIRQBij!emp7g%52?wi#}*eCK%jjr{!&t%~yZ=hq- z3+ul}&r`t2T0ZVAT}#KV9*0^BTXl&Mbo<9w-iP64pBu7cNdj6zz`%s$f$W4C(3*e5 zuRUu72m%QG$n%QSbOhFZs0P6XP|SmQ{*nAAUpuMc#5Ezn0hn+4f*$;<%;%s`|^fb`7BamRRb}4G z2p9btYouTd)EBLYsJ|CBXSb zuOa{5Ow0i}k7=X$0)z!28e~e?+^iV-z_KmH36 zasx;q|MG$Shj*6B_#*)ILc>$WIhhU31H(K!(4j#OF^4K7B!n124d4X#q+_jE5w>^cbBmu3^zHY(PiA`C z;jkS)E5hFU@I0aC50HuJPpquJJe%T`K@-5n$4Vs}wVf`nAZ+zT9#wXx)a~@BZfQ7qo-rA17JIJ%`-tYC8dAl3)2VUZj z)Nm=G+mnm=!FF{S{@{_>sSE{Y2M)^P&GmYgI^F-xAOQa}r|VND>Bh$m6rDh&mS6d3^!!Nk6Q9u^lBGNj5FQDe!o)=Y&|C<= z<&X0l0dT)uft5}YG$mNm`B`7JApZby7{qxaG0e5|9hGVHnEX+0%zPrj!TIR4mfD@%E#9cZ#`_T)NV zMJPqs$;{%ztR;>O@$IS|vR zk!O|(s9gCqaY*QmzY`GQZ51V?-N~(SOoRs|fnn(4Rl(KMbu+q87mUM^-V8iG`;;pm zPvv_529lm=o}ECaaces-%^=*{={B9pegXZIV>VcoyDTA)fb;~_&AUz%;97F<@_x1+ zVqT62K|%J4-g75HoPNkIT!uju;!wlxqdH#q}uL!Y7|o~Sptyz|VF z&c-x=sU4&scV*e0jOA01`gHGN&ma2(y(1rXkgcfyo@N=JTu%&Re2!_gfS9!FHL7or37XlB@@wP?sj zl4(pJq)$m@gD|59`RdUk6Vhvnj+yZ-c4Dr}K3+YLfL`mpvmf|G^H1)bbm!F9QBNOy z67}zZz2^6guEpK|ss86GpzaOl{a)=MbU*xXId)~2EY%@6Fq%ir+>YZ<4u6tA0pt`k zDLBLLWIjbfOfP*EP>Pw$|KJoN&r$&Fk> zrU;Juk6p*+&yaN^xHFE~+CHAcvxU}a@?>wGB+uzae#meno zd`)wX?K}O`fV9b*J9gquN3GQQFKH>eYGqeplSP2zW^d324%0XeQzR#rJjXA7iiy0A zB!y{JUr+Q%ZNu7*VYilp}swg&CWWiNW6>j)>gm^F&u+r$8ysOdII!D z3zL;(PV#3+ge_U%=i)Hh(JS#M*7bL2zjW~Xj92C2@*g~$;!__H^uJ}?soSQjV!cz? z2<_86^}nmXg&p)i6~=PTOx&Cqa^320|KK`d3{p-Vxa~MRT{jty*5RS!4?6dEu9KYi zE+2S(cdm?_+f4gY5217Mk(~#f75&;!2qp6igrY?Ny>50e9#U%DMH^%u9f9ruyvSff zb{irye~SgP@S#S=DBfh!%*xEeii=QZwk{o%K3EHazDO}C5juD=5~@^uGYX8#&rf$^ zPupgHdVO*zi_cL<{Oq^E$Gf^H{!_arB|RDZXa+^=LO4%0}&oisOw}o%gh)tBLgKrL$##mk2V*Ch%D@T#jRx=MYX= z50zs8>(bZvcwS*gH*97+!@Gih@9onb=#ZCxULI`m<~&wY;38>m-Ngg&(sk`T?jQuV z<|NO(JlAp#=){CT0HyWK)d2N@u0I50-}Nx~IeLOmv+qD-=jeU6p{`X&1^ zQ>2)Z58EEaV`Xn`8(!%Op7)3lKvr8D_#FqU>vi@VMrqOHj)$dXz#P0Y%l`9|yM=2Q zOjLyF+-BcDEjuoFZrA_j;)9j-o@o^uvV8i^7N2C$Ki&RHPFmRvOd3BQeBeA4(e4kV z_<{9C_r~YO-zl)V({th}%46BUp9pOoNjuLMVLi%RUUNi5r187X`poRsdn1=&`&LA*+YMicHz>l_1UoRa{@u>z2px1 za>F(tq*yS$@aSb&l*OeXe9%T=xb8oEajZ<8kt zIUNE9`Iezhv(b|mIJ`%2Tt2S3oin752HI-$H(mO4$-Ex>S#==)pLJl~L;G*aacNNS zM0YFu0|#eimrasF?041<8`&(6zq^!Pz6C2NzT8bP%Ln5ykoEaPFtCdGPsySQco~jhQvfqLqH&6NX10TXPZNSs zfb5sf56~&Qsl_WNVH8l$V*)hk=qpt`D+O5d!4HgLf>q6U(Kdh%0GD&j1aTSZ_=B|f z>m=k8biM!g+5!2D*vl`+wJ)W4x~_o6>^mX;l4jkrKe{5bW7lSWFN7?Mp}f;bi2+hT zc{xeW=estYl#L){^a4H0AV5Y^!NU9PbUWzrL1Pu>n>_-jwX#NmqFok|(MqbtCwGK0 zxHlK)yAr>c^SwJe>6Hh0e^%_`etZXDPw!#gj#Kjvy^<0T`bK6+-1bB3{3lz4e}vOQ(?Rt*3OPOLgK~E>?t(5m3f6t4c#Cw^}1^DjqhqL^X!}{i$0BDwfa(BT<2=K^Bh2MdoSR;Q77Lim*RPG!@{-0PebT3oss;ztEbMHe6=k>3{+LyI+0W)12fH ztTbkkM@O1plg)_VnlG=dLD)>b%qoOMpG@2wNPq^xZxnE2AM;s~C>0iC9Ly{SCpDJy zE%q8OqKSrn0?RAj9{5=JyGRPKJMip<`E9kVN3{M;8^~0eC%tvN{kLz`o-cpo^Zk$f%hD=C}B8 zUYxR%WT;o59}?8Km29UBmgF*kNq*OQ+vBz7IAt-DXwab=S_MPC?TUn%+W9D;nG@Qk zD7M`XL*Nz4H&J0Zt`tfB#a}2U$8j3lvwYoc_LD3$fW)%?d7^jbp$x?l@Y}9W`uQo) zZu;*JK?nH{djw^79wDnRdPv5Qre`qW^e`e~`4Ro7U-xklDeyfw--4JBssR7A{~`1s zBMnW~gTY?J+}m65-bF777(DgZzx}0gbt6m>n_LqHR8axt@n|lN~v4$H&;0_#92v z(iecqg^3D}IeA-0($lsZV=)5{NMfZw0B_|cDrcOrTCTUn35%$WrQ_BaS+mmTDfZ;< zqHzCeQ=Gj5%vAAx9sL_&38cRC-!gy*-BoFNoyVpU&t=fC#=jpar2ePlv+B2) zcOUEOx$6Qv8c#c2kl9h{eV6WZPm9Y&)f$K>!>?A1ph6B&e*FA+mkYD;=C zwb|)CXx1}ch?4KL+vLU>tQfXV%n(DsrHm-4bX0wc_^@}`i|zm_gn+zu8N)We6j7OC z&WlC&^8e^R{()SZ{}%}`(FFu2FqQ(sk^M&yos?5F+{)Mo)c}bskwXAnZ_TL>?`LNn zVe`uYc~Tx%v{B08FCp)&+$%I|PGer=pxx^maI#S+0^nq04C&ph{q9 z*KJ~_ETr4do^Qi0*(qWKMEIGa6Hz~h{dZR#v*C*}lV3&} z0hJH`Kwv)QRxiiVJ1K8|#hT8mtj9>0%&S8O^^ua?%v~dQeI6}BeBy!s{P|z})Bno; z@%o2x{kQ+ee`8NTk@77+7&4}<#M)}Y#mDZW*|ZU5K%?Piwy#8v$PsBYH&-%U`W;H6 z%RKG;x=mhub6NXz)aeA*iqYAN+1@1qV`YL2`j5H$FaM+edhLMxyMOa<$l>kUr>)8l zobQD~|2EM#+Un48@X5W;phaAbcwEYQp8^@;Q1>=JS}uTku1=86bKQUTFaHH=C!kJ4 zjjV@r+o%3A^&1IfaxUCETd6}YF8=!qnflGMGvkKJtIuDMuQ`1l0nNm?CrBxSzdFba zO*w~hHX3}a>GV>ZT2-^tQ8pY;%B`;zfc<#79ZW=xJ$Za@wjI|@9F3KM*d5hs`|tkE zza1qy&ujf}GPdhySmQTN?FaYnv{0 zZQ0iBuloP=pa1Gdfh$RW0S$4`QOFyz;h@vQOSSJhgh+qm-03xy%_eL_c15T(2Y{?+ z;qq(rSyeX!4*8JArEpSE-tGD{1xc*{V)?>;~YX7E8>iBA3B{V)I4)YoIpwz6^U zl2YaeXP$h>)Q!FmdU5S>$Zpd5hsuWucUOoVb^qDF_?J@moFpZ1 z&L0q1;t8B|_$_|92G7loFZ;=Yw4~CzHTyx#A=oesGAP3>FFy6sWvu+Hwo70gCoQrs zx=_jy5ktUUR6mx!iN=VyQIZqTYlos&UsjQf@>_ogB-E$2`LY{%oERP1|C1 zT+gkcDwD6VjhBqrG5E-=u4f=(a5_~_MWep`6$n`zYfMQ9mQszyQOyAA9DI}s+NBZy zVvVfx^IoLQ)R@(JwMwp)h@L(k!Ggt?!^SrRi>h5+y zJYY%4KZ6*Vvmcy&W_b+WqB&|=hLpKjI%LflpTsss0>P{RVgeiQy+m_}20bjA?|Q$1 z`cKTitek<1SKZWsx3h6sJ8`aD-dqn?f~~^5(jSDi_BxmvGH&yC!y9n zn6$$g*4ZYyELWY>BkC$Uw^|s^N!JL||>`XDKHziF8sK=`ZSrr2|;0^ZCMVXHWr3xiQ~|m0rng zAUuLGHyUs6AWecLbOE~%*covFeZr|%;6hpS9;nc1GHbE`V}ec#AveYo@?Af*mS66B zm-j&3X{ch*sPdw3tt_o*3Pu6@JKz1^}3+}8}o619bGu@Eqg230>3aC|@z1pP%i%2T3N9b|1Ao^sh0NigKNBSu^>QuP z_0rvSgwFsnC-ab??(-9qf7tcsa@It3;L_L;=e>@)hv_{V$f9m4|I=9m9`9R%pwsou}+Y1qkRb{hKjJfLufVY|KZ&2Hj9j-}rjH zR)FvNhfrPLWC;A2dhSfd#RdT2<4mS+`N}54Ke5fp@AX0}{j~A>Bz(6Ek!+(`imMen zO^GDWLe}fG2>J`bowQ??A9&l!FJ-5Gwvv$Yh|3&iGN_~{paW_3W8?eK-x8)*;Z!Q< zyKe{&7UeC0Ke4}c0-%i90V5Dv;0s=EdAtyp<4&$IVp9Q5cFOn}9Yl=9>A^?B#&>YU zU4me{?4xguHX~i;rHfLSY2>e2-g5wc+J#V)-V-4@2`aNAt!O=S=U1IPwN;(KC$>d7 z`v;mQ+O0gNBAWL2rFO!FlVcURp8?oRT*PRHih{8z*#Wu0D}@_ta=Ih&O4=ln@MVzG z|1N{tGMGt6`pc$Gr5SkGCd5X^A(c5QW!Js7I*~C}GIqL#82s}7;?c_jY2d?T0kMmc znK;gaI2~m(azfv_D*AV}!`S&4z$k5*Or8zdLU;JjHo7+nJk6<=qdoZM=NEy^t$f|1 z02GhY&Zm(4iO)j6M_z`$rwuL@&k$l+OtiugJ_Go#HO6hTBd|>+;z*di%?6?u5F%n^ zotig0uh+UsaJ94^AdLK2xF%#S6O=n97G10=us{|U_xSyGm`k%%*XB$K-ys6xjqiM@T}+m6*Xe)e)n=fAsj)1c;0 z=!4^VLxU#vaiYyh@g^sr3;BWn4<@S$sJ8?u`|H!~Lc7{7dp`7EWQcvef4}4yBjj;z zet=iVxycx)nF>XIlLdbzhu59qqAKS?O#+4&M zFUdq`&&_zwwtk^|b2fYQ_pI1A`mJsXvyTkZC&jz>OYd(Qob4AP4642ZDE$Tqd{fwB zD(>uOHW*_Obx2Q8O5h&D*=S{}Ebb~8nVq0E2b6U`PV?pkCRxCw@gz--Rqn_qqwvh4<=2wF-Fe%a1Nz+Apok)9Y^LrqW_-g5B5@> zpx0}k+2@+g;KuFfVev7RZ>|+=`~*yOuQj)u^pXEoe3qSf`mQ>B;OWy952c|pX*Krk zf*Cma0k-n~w)M+MQ21f#a_enhts-{h@3&u^9S*cTM9K+G2{asF<}TUY@f{AbZKI`3A^zbU*aFOn4zYA>hZ zWOaIaqi`!?aK|Kh$yd#l^QcT0Jbc#j)pm9>F|2oju1t)<}&SI4Af2$6=@Ks z^Oe~$`{r8ppx5PqD|Ju~6BY?u`LQce127>99HB!{Mc!qew7s{eN+CRgy)KiTYP5`< zwLs+LEYE?5*~xjRh3f#b>2vGf2;OyvMI>z5>Q@CH12FhB?%vy5&(?Adyk)DJ&ILL~ zJDG5wqpt8E>b0%q=t3X1$hdJikJ!%uTa1jZI)|iTJ#$^dr%orGHLm=Af@oGsj%=n^ zTlT^6+4)k=+!YYP>3Y>f?yY662h=)m9TS z&LCkCh@8Iws4>GI*DGtLz7&~T-R(%47?}6DI>>r--9cu#l36y6Xua2{^pjyZ?3J~} zz`c|8{E6L4svQArRnM|r68t~k(;9ByVUn}%L7tW4&DW$bfseTIg`$&Ao;5#&#-y_c zI`LQbf5np}wkxT*#GuCiai`$crVk>Iz6&XSRJ1&y_V}IDzTcBR?WXa zI^>!O*8!}SFF}B9L*^Jr>l%av^(#@)$l-XgX+MRa$_8O)kzKxC@|?&>Y`dH+(ID<+ zmuuI}bFBs_6y%y60~@!q5TC9nFa1^hoxPhvM(;!dgiXv-VdmN%D2;MKGwA1`{_2a} zfEhPgU`t@a|0D{|3PC!m=atO|0w$W&^=k?Ae3&V)WHSq$*Zb(!OSiV)_xVPX*&=~5 zT}c9e0aNZ8mbQendXHMbxGn zecRaIZ!SMvYcdmCcS_Mp8rg_u-&L-^mF>Y{O%{MUfZKt`rtN{Mu(M^e(x`gLT>ia> zMI;Ywt?%C9)_Rc%ry_$5la8|(QWLU^ktM2+4el+JB+pc^Tx~k_a_veOgMsM~X!qOh zcV7bKeJo|29?0aFm3~|KTR-c+q>s!xVRn3y1s_c5r#=}F4>YbgYP%;s>x2CJMJJT@ zepNCqETOmMo#B|C0`(FA08mzuZiz!!>K${!g zj?e2=#{qLpzv}funWqhJ94BEW0W{F4q?YtsMvVR~qLKzVxZM3tlOxCzy2q^T`&IDD z&ayW|9GYZHyCYM@mMs8L!9Hp0Zup}MKz@G`2Xz2nT@7^FmG-eb3Km-H7t!ck0T~L+v}J=9L%q*RT6BHE%ASct zqhukYRu7e!L(y#xvT$;R@?O) zaGmMbkH2_ZXIR}BN3eHbuw{gQM#%MY5mEw$clIc)YZyU%8r3DLxpR)-A#up+%=3t$ zJ8XD6Q>zRt9kjM>UIRq76}m0X8uY0DN`rb4?Fi1wGA}UT*iBse4?o1?R>L17G2Y)| z6wFfR6du;;w&n*x6X_HiW8Uk^3Tr>}`?RW04nK%QI-OI(thiHs3gO@Ep6IfVQjz?%YGj;kIV?va2GF$ z6|+b%Ayfm?WTC!5`p=}Xt+(T~gi9YOd{rB-szG}T*6BJK`=bCe=JL;UX#6gM9cKqJ z%*pxtxLn$8G^07!WBcxe_Iv09-zJYbCvi|nv!fCK(69qFY{@!N(3-E^=r#jZK@l7d z+sl7pqG%Eva9~UnD4w@aUe?)p<94BGCMu1(BfGR`2U>L1RC9+rGlaT`*ZP16hE`9MJ-5BS!&4d5uLxp23fN7DmwT+tl|j;YyxMKWqk4&=^HlxGI@yU{(2 zY8$I#Y3ZhNZKfWdX-?UV197Z(r81l{R-oPOrs?NCMXx3E64(0Ya^<1>RlQ^6KLyk5 zfnEnY6`WVniu2GOxJ#Rjb>aje$bdX^KBd$32M1L=8jq+vw&r$QjkZV#q&%Zd1r}Bd zkioE5y(qanoOA*pOQ2N&NAQ`bmHNva4rv!i0wFMgew2$|$E7o1^p*g_xDRr2v%zkC zF8u-HD2)m1b>3$mNx0eU6YZ}R-FVv1Om)wF0_d)nhd%o#@GZGHB??qFQ63@QG`oHE ze)GQA_hs8!IKkbm_o{PBRBuJcf)c(R*{fD`PD02f!S#CYFw{}ST>lkB552Tf-Z}&v zc*ZaU-yok{J1#kQrSo#!-@@9iV+5W*DINadQ7o%*$#k32H}b~s?JZbyn$G1>71)h; z1vmkT1N~D;ge=f1IM>(mgFv3Y_h|A|XI?iied;MN3nMmiFAyTulWP(RcCrx62AIRvWwi0UfpkVKE0aWGZ5l%R zZvG4oRu!tsTNba+XJCGMCLv1Zx40}>8rQbzRmT?bx^xE-P3w8GFn@iDfe#l%0d(((`eH(BC3-~Y?mIu7|- zXXO##!g&$md2={sqRRsGLUt9SoMudCX?BnW0W|#{W(9V*%Cb+}uA8`S7bQ&Wr`X`6 zzX73(Jl>@gr2TToIR2aOaJ%b|DL~8LA^cAsz4H`Of^7T>Dx%HF3T_L7Mkb%Ig_ta^ z56YmGP%HShNX~obS#(t*Yf015Xq*j zEK{HY{72A`=aDPg>tH$NagBtw6&3TGz43!n)f;b!Vybi7s$xfD;L+jn-B)E(V>bnZ3z1{cV0;b?@OiweiCZ@^R3K1RiHXtnWoQLDK8RY?adT z-cJE5k$q3anrF)yws;ZHSJ``rbgxd^BMRstZd zlvjAoUj_P}_C$IM1y5kI^f-^8SkF!e&PG4z#s&mj*WxfMc9t1v)^|483%JdWoR0R` z$9I|&JuSGHM>w=6EI>)a9K9RKLN zMa2H>BYC*|KFiMsnO{KmD!XU1*(iL|InPeL5#LF~yaAFe%xT{P$`>V*0x2$sBU3bb&9C~lE z6P@7D*f>xs_1$HXa~MVYK~nz+%t2Q(1GLwTxVD=`foyK5ZY*b^K%8i%GBtyoQ>I#v z5^y6LD=(DKdsz8@m4hQdb6F{Zz>*}Dt$?DeKnCY-B0BTBQ0^Vsu>$qKv=h&JU?SBU z2dU`J27;diT@{!`tx9a=j_ZpyFfqPtA{A=p%>|MO67X z)E9bj6p6h}+;weKY<Ou~Uhu*!8g=nn&{@3Rw_ZXyPYSU&C z>hb8KW^;S%24uVvQaBz{D-K#1XJexu=QU=1ab&7MDQvY%TQrFRe?RWlb%q~a=fC2? zrp2*ThyHMB@NlbQD%TIDtzw-D#cBS@t3`LVhIW^ue)LH}j z2buS!7w%(sT==vK7_fU{n}f2n8PJQaThj=5+aW5(EfaaazqSBmOtLirTT~ajTfNU$ zTWZ;PVFghm=0%|&It_N#8hi%!}WK% zr`~eMYyH9+`}csem0`!BfH{O~t>uyqvgZj{)`+Y^fd%Pha6NGNsbD>nIvt>a*MjJhA>;Hg8|UV^MM_&w161df;?oq@^)SUvfyllnJZdI)Ol z!vCe3CX$v8Fd>z4mGYJUxOec*@D27cCCe44M7~hLY&TkNZH|I+n{+w;-1&%~t{Y~| zEX!Q!n{}LeslK2EGCC$fZz*%7|9<{kSdr-tgRoNn`H%|4Ba>p$qmsk*=xEYDQdZ-z zI}vf!4VABMy1XTscDQ|~buRPf(i%rkyi1#J%Jil`)s6DTkNC<_SMU_=+KmIxly0*7q?Sr>&XptfjMc6W`Cpvb%a+az<9rPb$S#PwN zh1MGqAXt2+c&{OJE}1qPS>I=e=Kxk_0+3}}-82}9%-}GTmE8+r<@Fo#HFtTfR;uo)3<5s2XgIht~;qaiS98=A?I7aEv)8U*l zk$FUIzj3f}&CI&|XE{bc(Z}r%R|jJq{FxO{&~mroa&j@woyCE#a+c9*)m({bkwxSY zh9YQtf6Q5qp&pLCN$EV^*>49mUBf$+}p9UYx~=^Ym1qJE2SS1k3J~268Q`b?wjkiM&L%LTFRVcZRHk&u>ll|eLmLfSxtM*Y&jrtJ>fEGRXOKe$ zuFARNqQ#?R%Gl<0u%;2s@t>~vSXO$FgKfS~_3Rd)*Q)zo*7^vM#Qu4^PIjqzQ!&J{ z5iu?W`2_asIf?Zb$)Q)=%)qhK=*P>26>riQ!i!s~(9nO#BI}D4KpTsCqZ`8o^*;hq z%G}HDxC_;qjhOR+WJ46mwTl@uXp%7hEpBVR(6{L>kzL+`bu)0)#}LT|jI09-_bY9J zsuAEoxNpk0v2(k3iNbG+@kzKh7pWOtb$o0fj>W#Y-t-DIIR5C`97YJ(utIv7ObIS6x%;*5}l057LW2>%l~DkhYa}LoT;#${48R4bG_y z_RySePQcjSL2>hbQ^;zt(LkL>|7gY+Z|-+%GVO+bp3CO>?sYOSyMrCB9-|`==PW`b z8O&fLrdw^zZn?pbjsSVhUue+KdJI_rx>M(?L{q~YIVkA=a&O5{3-B$vE<$ViX zEcf1kMge9r+{S`Ttt|<2ep34?8D;8!ocFB{lpWUVa_d>EvmFy(nYIC;hglmK{ja%N z8nazLCUL+0_vDBy3@kHGrr7 zr@u_m%tV1LTic+FaRq`qIG-=R%9pJ!hRV& zH(+s%;CFG4543O2$;Lg+ct@pXI{j-_qSM|DzwgFMf)CSiq;uKlankJlWi~V*v_YeZ z|9^adoT2=C($dcWtfb9tz#k5QV=uvzPJ&0XII5YDP!gVm zStGrTIGCB?l83KqU`5m9a&c~L+13R0fZ4Vy>_jzoBiZ}R4;Pv~KKu6u?3;YqMfh`W zkx`zNydUY>69s3UBzro@J?sC*+rg>df~48UWm;Wgdh5J$s^63Hb~eB7LT5{pfEY14 zb~z-_&K*Xz&talZDP_)`IvVZC>0(Z?Z0wrv+}-SJPa|E%JC$hl`vd)_+QGSpuUDgL zH^&{iV8Egbt@1Sw2{;``%^0-x0S{fH59|9AVd5mWDLbg=<2Ar*YkTr%$M10tdP4qd z0h68hc;azglfE+qHk+XPcDbGTZ1mmd_%btZSPp|Zg8sYL8xSLU&_X##TV8y>Dah_X z%Rx!=)E-F`1b**B&0WC!@oL#$*CSWv*D0ddxvw+za<>!?*a!cf*qKjExv8|B+RbZ;wFE)48vT7HT;qC;d``r)Sc6J==8)_&=vm@8#Wyy&tLeJ zFR!DoXd4$4i$D@v$b8l!xapOQ&a_S}z}rUQ@mZ+UqB=l&>pC*XCm z??KyJ0Ckh>kr;~$O)Vvr#jm?Q|FOQT;qHm`sOSGe>RV6l&@e{9VEoTULg;vXlD)0H$^(j0hDXp)P2w6j_~?PVI~Q!#Y|-KVq`m7r*1pfpaSq&@ z9zSu9pX%axR5fjK-7)Awq>LcbguMboyb#76>-CQWD+d-7Te!%$iEgHBRS9)5pkt)7 z0v5|mawZI3IQH1av`+idu0#KS5Zo{Qhh0Eoq9rh`%g?gtdXmMU_7s12?x;%OqH^<)jlI&D_lHtnlw$@rxEd~zGPQALwAjUO zeRIi_y6k=!vM|%qLVWkBsHh>hJ+>pWPym$?tBeEMNp920(Qe&qG2GDqk; zD8K!R_0U*?{O(*Cgm~wjZYIZ}2G-jg%eMJyqOftz^W=tnd-W$Wy#`b=(?&WzZ!*}X z0UnXuxY=V%x6?dtL5r}GJb9$A<^ zuKoI}ZM! z`Wd<{R~y*~&h4mk4|<(uuGS~G=90`U-6@z>++yD$Grx4m@V+p(LN`Y&1-^`N@R zyc+P^eFx;r;Ny1Xd~Ib@G4#4c;U@t*@sl88Z#%LGxAt}|cL>Q=H$m}{4i)V*b5hpo9FnND?&z6S&$N)6L;`S-g%>h^v#1Ko8t!m&LjX?7VRv>ER(`4Qiu&B z=NU`{@0d+M*5x5;uX`+0AUmbgNKJPM+=IX^V*p8JByJ`vc zUr8Y5Si&-6iuPp+7#KWFO)^6e&|R_zEm zl6jR+`akFzc8RJ@=rbVY5ChgpX4)SO{F4x$jO!DP(5Tw(eICnarc1`L0Y&?hE3V@t z?NiXB{keG9;ixAxvdVVWtK!UjCNz}TPXh4T?uv38-jpPeHOfqEzyx%P;vbIs-gF=u zz!ECYG>+v33g5qKUKnxw)R7<<%QTXyb}yeWHB2-5$P(+$T0Ud-t7qPVmCS1K`7CCb z%}Qp4chPg&B90}XV>wqirRY}Y-790p(d8J@X+X9C$kO;no7T1=7CIRvF6x{_K9Rvn zXL{5lvZQ3a8@vg3HUZSU$~U!vwY~^Mq^}+PqfeFu_yJWzZ!fM zE6y@+mW@z&h_(diUhg<)<4YaTKcwe8a>D1LQYNz>%I3*%rCg~s_v9w(3_E~}wYjnR zvw{xqa>HGN5y&)Br4Nhk(h0P00ZY>zvmVs6gD^&aYPcW4H$7UNh2I8OmOA<^MvV6> zzAg*+)CSZyy|@G(O1Jam)&Q;Is|Q;Cp^uIC0Td#6O{VReivl2A_>~jYy-vTB0wYFX z;pvJ!5DX7l!e9a#W4)QBzwAi&4NdJenh*;Aff z%yMjOtet`7q{L|zmMfv8kp_Qcm3$ekR^*vLOcTUP=O-|$bw-(Et^P8AsfW;g%yYmP zkgrr&DBt?8y7zs{{A_vBVd+rK3h+sLJDK3v2+9PtPf&p(dlS$KT&(0dwEQ4DW*2_M ztq@3cV_h_Q-pK4G?;Re@#6_bU#f5KF>_Xj!u@03Fquip*I=7fF)n$|512cm5*+=eS z^SLXR-78{1-;ZA{SzQAR9cQ;g%uZLp-iDaGU?9%e)nE%E^eC^(5iE1k7X7y_i0nJ4 zZgg67UKk_F+ZZS+Q%c$(4AVdLUm4l8tW`FmfE-}!Pi@ju^6C;$G~HDIB*3aCDQ=S5 zHG02_?#9z0v()B9!6bY#g(I%MG8_9#vyRD11QJ^0q0SesjuzB{zsVWS-Q*#y>39Ch zrgr!N`CI>AN3EcLh1uGirR+wH-DM|)QxluNG8v2xzvjs}_Qs~xWl}qXAB+_VEVQ8h z8~r2b@-#xI)``QRocRey{H*|2Q<>ccbGLN#;TQVa&-QHu1GhjX?9M;9)Y@TESrb<7 zA9&mQw2gMxk4liTyX!PC@wGfa$hage$rB+cXjf^#(xz-fJ#2|mQApZ&l)q&$Rzha+ zq=_Wz#Kc`l6>1cJ+PLx9Gb_S5$(RL?Hj}V~41!q`U>sIciWXe%El+K0aP`k}LL%6H`Fq(i52q20eb1-L2Shk2?fSnG`W4R8-0W9vI< zcm)&hzCDAW$p2Ou00}h2<;@(JZ@7vi9BpSK#~~T!-+zC8R>n$#0~-F-O>Vr<_D4CK z66$s^csNv`rKO-zVye|LJ62vJji4imbU>N`?qbfhk@JPaNJ%i$oO%@m3i~@ecR=EBOCJ!v? z2o}!bTh!Y~4047(FxjE@w+2%B?;^_v$J*+ITi5@_X%j{7UpE6En+%-6hSZ8ZLuz)B zqZ1&P;P=ED{Kctln=^Zs-R?&&{>ftL#W3Cpx^#?Iar4j(;WC&09rGP6+8y|8+ zvCX*&Yxsx6wBb^V`fiL7*izj~%@3z#*)oxF_t^NKM%vuNdPuK_|F0@Nqeedv>G zD*V?^Z=YPyLF4utX<5|)%u}3n#?Cz2wcIs_a;ddZyKU96dy>G_An|8pci%`4Ilt z!3eqq=q@Bi<$la&`X<+BK;YH;N*s*w<@@P(9|bImmlZr*aq0Umcwt-cad5V%??Zvk zw95)j#oNBGj=0`e#ZF=9;~9ok4+&BON!a+QOAM5}0$=fTijhRulEQVv#s0%CMk4%b~*<9ri39^cZL zzv9{;<6VO>WVIgL{|>NFQd3>8D%xvcqYh(&Z0K`W?{ZJ6t+(tjLq%SONBhYm9%i+B z(RNO(k_k1G)MGV4Y8W_z;7a~wU-s|hI_3s^Gs+OX3vl*t%GhrlM3choQ3Bh^r zp?I;UYRg-OH%x*6hur?&daYP`&$_p-JWA>BGJjw56tVXXrf*nrIMOSXrw|V3 z$%E&x%W65xZ23m$zdi#po%l48dd1;)6Zm4JN+)i)oadOFRLX=$8ole@gs10aNUvu8gi@Flq5 zszMU6V_Z!&F!dU+!@tF0bs1R4@6I~^hK;o_4H;?|RbT(n$DHP_B~$7cVg(vjza?pf zJYX=(3?1;&y>&0TUN5j!N1vmnjCwb07#yhj!gd`%XjoU=R-I$-Wt)CQ+-XVB6GCm+ zheqSy=Yo7JlEXHe=**#fUMDHQ=fs?>vG9l2+=t)zT%X*ru7sBa(ak~E6h>oGkK;Mp z^RqI=U_I|yooWe5#LDRhr|J6X&oRY#RwMOnOl(-|KlNY79wx^MYi?5i32C|xj1^O) zBWp~O^%gAe&g46=e!d@SZD8Cr4RbJ_Cqat?ZP33ux5K@w(jP7=!2mce-zU$0pwU=k zxzvu`b#-I?mOe(#Cg%_l1Q@|ymMDObENGZOT$Gm~klhl)HUy_LGq;XE4CSTLC0VPB z5Z+v$gWYWnw$)HD^=07DB=2Bv zZ!}JJ*hd>`qWUOgX%0M|`qYWg$y@iPZd4x%`tcbTUS)DO-fi$XX=u|L)7sTeEBg)? zQjUzqN7}RulCeuiVru=7&#=%p3$gJE+99*l5i5Oi+t!A4VSgfz7lzPco!YJ2=3x!i z*^gwg%m2j?7w12@UYh!?o7BCj|70NlnOMVnLT9euoap`1T56|Gb@%IteUAFb^P>$1 zJ#qAO&qtXn0`RUqH~szQicMRLeMC!Kr0rcdLw5a;_%!v_5e4Q|2C@F8ws$e$n`{AN z1atweM1rNrwiOVwzTmY8aV-XDRa5$B}5mRP%b}Y+`8JrDaoyPXYo2%jilLzYBu0{oL>MQbT@;(l^ES`&Q>Iat@uF zLqC(2k1tI+Y&ap)g?UA9;f9?7TL=>W8M9q$g=3DXd`oT-heW&LBp_M8pYLZrN|-73 z*`7~aVb%?q+_uH|ZspUUl#SN4k1@vks-u6?vy{5i5!g<&7>1(JamH$Flq|VgFfg5lZ~*04q>4N0+=j=%3uS^xhOH~W!&w^AOff45WP0Dmnzo` zZHzA}M^F|xn<(c~!HVIna{Y~0OI*B1qx*v75TGjJ%(T*v?6Qo&B=jg&{>wUk>(4BFQ#xx%V@z@M3@2o~&r8yaQIi2dKPr($ zOW7l|pv+&{%@9!417G~*WNXLwaI^)w)_G`vWtaeW${_;kI@dvZMT_5Mr=lDZd&mTC zst7?}lwXv(q)q79^&dQA2j6%+kv((l$-8es`M?eCA6?Bs4#ZX$p+>i=SNVbgF?`oa zf3UP&o^Q10IF$D3JNlq53_NyJ%fs(D+|^XP^0@i`o@uMKU-;AojamAz2&-d5edpa^ zn?uL9`YC|^K89O!E6=2MpUe94EJn(Dlbg^T5u6rD>#RE0_$aq0y~!;kV{=~c3ICdU zbkxV>B&`$l|7~bIST|pW;T=xD%sMN2#rzyf)pc3Srv@4>=YbEGU;4c%rAFm;2xumq z1A)83YntZoUb?iggbZK@9szumaX=Bb%X8YI*xfR7*kOl(w{hQ)ZCc<#oRzmTgWZNj zWr*J&xyGInrF{pLNRFcjeR(@qV~bzC;DGzk4cD`l$@;5;F^esDm~&{Q6z)7*pxN}Q zw~2ZVn(eDt9LeOlzMoBSGoI0#glbgOJU?AA*yiu{*M)PT4pLtZRcW4dx||qmKo1{u zFXEa1rjN2uWN1I|Kv?|=n8xUNvqO+n3|#u&(E+uDiDdPcppx|crQ z>)4byqBSP39h4lJCZ58fY~tJq7S+V6kyHny6IHX>cRf`9W$Pr=fmzKlRJ9lgIxPO& zR$5oW_A8WK*RpQg?Xoj5y7^EpavW!Q|3*>=CA&?yg3UOT-{`u0@AvesHE=Z(A{48= z3-3BYFq7I-JMG1QPoaz7hs`a6hD7;|=eQhe8NjINlG3q8%??0Ex-t_txcm^a*U?}9 zxe}m@z-9_h2BD5$b^T9&8*=nmzr!}gfqViu@Fasc%$MEdpx8`8q}?m;RJ-rG&|bvs z@e1))an&?C_Fs!)Em3_4+PC&w36`W%DwD?}50gp<=|UYjO`pMNVTx5EHnVs#B&xC; zJ9+MIb`%ieH992FO64JhOn!2;l9v)1-3eEzKI(sfw&$3Ov1sxY5tU2`5h7XF@eGtW z;iLY)3?s6G5MQq2Y8i~#5Xgrh;jCmQ+N*tx%n{n(qHzDffBlZ4pZ~=Ze^2wY4bv$T zRFW8cPyA|TE!tiHAK%drQG|jR1TF+<8GI-^A!p9tBA0+f?SR+K5Fo-^Ayu+p3OIL5 zVsl0WLIA&+)unR2C#Yy}tiS)}-#Z!UUa2&r^PV*mCMs)YvNJB3Fl)cfEW{X~N^w!r z5@jwrca&XgLSA;J7_t@^?1p*QqygZ6ikC|HO^c^<;&$rG6d3HCmhqb9m$JCjJlT!r zKtjHy;jOg^n%f4Ry%MRhcWEyFEwEt+&egr>{^`SY8n^!TQ(x-)CIH;C=|Kw+5W~#o<{#!`TWjN| zsn5xuvg=0hgdIg5nQ~@OyId9lE4y#Pr;Ve3qaAMKu4C%I$iKm_C=hgyZI?0UB=e#~(v?-SrKtlf4=mMF1aU)GOWaq5L$a?fisc!RzSDX$*hv|M%vb$0O^o^41^^FmM2scg~eXT`T zXWN)GSq~W90%QSU^jiE9_@o}uw-+_wX!5qgS~rt~5r-N1dPS@4?v#Mk%z)J=>JiG) zOSGAwLca~FdZPqm$1K`#vw517#-ss?(4q;Vx2*qk#9=mfJqQL(k1S0&aBCfD+0+H9 zdX)HW&CAT+46}~M{l&hNmr-7W znOZU(cy6ha89Q^3J0E9!;}Ag0n&mDCWhW3wH~lTftdO5Mm$nq9PSXND2AoC)3{bJv zJ&u8;120I0z~^V_?zZ0jfsr@ja>?k4s{Y>kSz#8&Shg%&b@%7C%GLxRwxakT+h;re zMOWj-2oOT7^T`g6t2FV@Q#|l--^ttPcl8$;8gjJtQMNsgJkaPE#U-6jX7yQW61=Vj z$9W=_0}nmnT%PV6GOar%=x{JU&)S_ zw|ic)jpvnAy57&YmL738Ug>e{SjN=aP?ul5;WHb7JWR%-60F#DWXZl`oNkz-kZv;A z%C6h0L^FFe=dYZUK9kj`U8izp4CAmvu`Sb?F8bZ;goKuQGp<5*6YLuwH1IR)@gYKhCc3lZ5MVYk*hB1D$J}b zS<4QS8!t>M8SF+^DOqU5y*P7uUL<8N`7GtxfMd5ORtLZGx1(7*qR?Oeuq}&fxEycO zjtT&nn`Ve~y}iUQR07&^kTz-fp`Rc8<>(GLPvBD*!^}6g(Y{8Pr?@zgP2V4!OxxiJ zeLlgCv{{ooV;4P-C}FdDPoTOS;|_pmV}v*&I0>I#CX)fCQTm(y&+lJOUydYEi_GtW zOG}Gn>EGw+73hVX!LaAL$$8{e>_)dh^^YxJ#{WRAgSO?7qIN}8Kmtxatbs%VQsuGk zs~p>KJ=1@Puhh)zpW5->jVZ5b%(nVl-3NcQ>jw>)0P*C#6WzYYf&O03tfv$?eV-qJ zCUR42&`g}B^`=c4+^nDRMd%%Af32PW&d++<_qXk9J>M8>oZ2IgrnD}j zqHm*It~A`1mM`?hDKOc6RL_^=l@kDJc$3ykj_!&`GO!5|I0Pl@XquPJaPM*<7~>>= z@lZa!ij8_(;9%$Lq$5m(R+jzT-tW61lVbBhQSC`5;+VYptb5(3HTpUR6I*f|N_Xt( zE`mFH`CIIHK-NocAWfMNlLXM)7r2*>7z1NWk=Xn?0iqKSipLt?V&8L!yhrG)fXl6 zLr`%QvWO$~cBw+M=qzND{`tn?&TZ@;`sq%Uw$%)l|Mz+wXt=gLkBg>q<$kcX@@hD% zXnHy<97PE$Bk29SMZ`Mz$E9<#mZ<?GWpMIBdMe!0q|eRiDH41m>h3U?G7 zwHsJ~#Cn)-HtqX+P8_<$JID~9oQH)NRu2O6TtFA{DW7hm%-|4ItbG6uh@OBw>VFg; z<~EL<$TZ0R)WM8NsNO6n_jSUpvUocrf;hSMO@jJg>nMUj6N!8XK5jPun-BAo7VnZb>r`@Tv=kj_K6~pDy8z2ygzki=Cfl5IFOYqh7;HNlWbS=b z>g6rk4}BH_z$`C$`&@%K)ExnTc?_$jOUxp75gE5YrJVLD;+WKG!N0D8{N(PT0w;qq zbZ%B@?gV=6fOMl?^M0|Pb}U;&YJG0&y>17~{X)Bc#!e^o?i%=C%4ct7;5_Gt#;)o1 zDS5S1o7b4y*m=BR(OHk=jJqh_%7SkhOn1|F$IB1UIF~4C2F!V+FeG62;e^@{U0>yF z#vo(4fU@f@N1Q0Lj{h`xgvReaa-5Y7$}|B0H{ z@sJQ_9#&DV0(*9fvwgACPD{}2Zr>3|quPRM+K*Iv*x!uoWkomre*aUWI8L0)(W&~L z05dbqFgG|_w6s3xN;LSW&lm;*D*%mOV6Orqwk^YPw%Qk|=>R_1n;7$+JKvAH3mRk;LR;`G)d;C zw&%BO@-DzPoFW{0nxj4^WuIbK2roMs7w2Cc^4!ayaR6xqnYPh>qQBjo0Bg`WO-l6< z=bPy>j((zo->vC^V)3nX{=~m=Kdp{J`I5_(5ly>FIfNZg5dAAd?>8ZK$D0BW=mC5> zl0GqJPm@d-N9tl)SUJLyd*z@Bj(QNG!#vvU;CJ%SaMbE&HvqBq(F|zgr@&~n7mH+G zw(Oc<`{G&@f2@wUtp5D`DXsJqm)nU8U90Xt_NxAY(^)q3e*{h+W%zLU)@K~mQ9teS z+xhGSp&T+UlVM4-*XW!-9-vPN@ zn-SG;COMq~c636A%-FmrU>7C(_M+~}FBr=S4pUm}+e>M81qm)~t3Sc$VZM?tm#h+) zbzqWXd{oLlww9H=oTbICdq~G*zeWZD1z(72I}fD@B|`S%9&}wX00R%5C^4RRNbpys zUI89T12sX{|Cm$BUIw$?mI$yZjdtHbOh?wQAr#Ix_!@Rlaw#d#)c*{+7sxSdYGguo z{ed^yg1Vpmxg0I?ElDBtnn6qA>*2`c7@lNQJ6t!ZL54u>V*A}#IN8d3A8{rV zhp_Ft4IMuP8MjOMex{$i96+ZFj|g&i8rDqudUhwei*6RJeOWT*^*1d9b1i(;gidzi z1Z=z2ktJyG>-EZItrs7}I<824+?Ohvov-nhB~A?q?8;ED5Bl#+YMCx&x$0G!zAM{= z<+Ef2cmujD9UjNLIL+r3KFg|J&M|T_7k`Fem%pzxgvrCNvcsi&>*s;eDD$fyplK-j zl3aS?@m=*&F4RsptDi5gpRqeuCwP|LojebLyIaR9=iDBH0AePqWKsoYR)d!Pkl%VQ z{yBzsNz8y^@l0NkylP%Y`Si)L5w}!7#cS2o@5D&U7chw+IBo`K?;gDL-$ehRXZ%a( zN5gN^c&2zwFl~1MTh-3S+iz_b=Uw_!5t zGRmM?fLaAN$H4w9A8gWD>dNI6-4k$HQ|_1!KDYfvE{B!1DI~{Av>K!4nQGV>^Ud$2 zTP>8pD1sS4V-&*lhwtQ0wC$ufu^ZnMvYUNqvVQEP>ajj#Q=LL&?7 zYn%Sx0CtXV?4X#<-891=_b?{wQ%Q`!%|v!-8#C4GGiWhr0sHCFI;15kDAFSyIS)`gc=byYToB z^xS&A(fQ``FYYwoD#5vCl;a+t`!>=g<*r%BC5P>Zlz;?w9|&UI%7#J~1G_9nTJL^d zuYBKs%3;d6=p@soezm^_+b`cubjsmo`rF*Xy8a6-u3X!B!CWj`6r;V%Jk+@~y2LfJ zy88l^%H}M`yOm--s2r;O1K$-je~%rdAQ;H{wzEd{EhKhBx|t z@V8q+Abrc(W35_9`a~_!^`fZ_rBk?@fk|SGTdGom5I?iE#`2SIs*5Ojk{t{ay##yN zw=o6L5}dzHU*3kX^2l-3|5e7h(M7KZ;wkEK41NY7>$Hv|wXiHrcE81KfsYe%e84-_NW#0}R ztIUjB1K?`N2wG_q7EOcVlrtjIGB_65{V@DT*)OZs!-T*DAVWMoqpmZ+7(r7DJY`ni z@?pnkUE0_oT)xJFqgw$Lt!+{EDPvBbZNl+1W)rLj>*bL8l|1#Nbnt&CZMexFYhpkdG`139(4kLVQqpX=YR{uZ*smmv!$|`cMM9$SsFP`Ze285A`~p9ZB?L-Lk*^&`RiD4`kH*g=5p`D!c9MU=Tw<(k06 z_Z^ZVymm0Kp!}~1CoRaZpa2PdDr@V$|A&^UNVO{g6OEk`zSh(+j3^!gQkHZ19%XQj zJf9Aa!?JrYuLR=)OD46OiSrbA%w_Q5^AIe)UqPi*JYdK$!)PtAW^QMHW_FcSFaAf{ zZeMCN^zhzT8fAmfZ~s3fXVF|ujBk^7m)hM9B0y$IOlR2ZpROnU%LvnS=ZitZ89dk} zG4R_k5xD%-L)ZZ_NOJfRiQn4!oj{NVb`9o#Sq}#+;h8p=UYjzcA5EtA5{CE&-Z!qMZ>m#Ai9% z?^TdBBSWh(wziYcJLnVNbO=7${2uP#FOjbqlnvhTdlQGrsc+9T1%lOBf}dZap;v&F z-`jaaB{Gw%+Ao;BfuZQjiXHW3mCGi)=f?@2q9Fl4jU%#C1%)E##=zYA+^za=mi3KQ zK^qO|Vw4viaV{=G2VT!zDJT>DhZjs6@dm9=cCvq?9kOGFzXn$27l0kt9$o$`dPmy! zNp`EI1_yS)dh25!)0tew%GNkP=$7KR_>S8YY`B5||I3uaer)#82ay$!SU)C6@)FFi zPU>~J2xv)%CXl;@f>BV-iQnIW&Dy!(0G3g%V}nt41aAzbvvc$EXJ#0C8=?9o8>SsU zayK4}+k+~@$r{Wx8(Csh*oF7KEdV($4dP`9Xv)svee}6v|{}TOo?C@hwjJg?a5@am^ib;D9rUm!p-{UH)ZFWF(P3&V3`a#Cd zm*^S(OIi_8I78(4#`j5v>)+0=%J8)BGa$Lq?=n+;Ox@G=PjgdV7P3uD>)ZlCtvvyt z@(vl~sftyUI|IpA!!nJQEw4a{DqK?Si0=@nzZuKq0hqQxnL&?geph+vKj%|;JFtdn zvYaYQT^tdB%ttg#mb?tY5hCB^`?mn3PdgYs2*ShlX9}X7mqk1YnO%aH7@sC>A#mmo zZU=N9BK5R}WogaK)q;l+ApXhtAC)HgUs;x$?sa62(Zh(I{+_p z@3qqc1@pgO6i(`iZKLvIq&E8?Z3nxlyfK~ed!p24F{`lF z*bmY5Xq>5H`fPhY;%An_wMzuR-?cpv@s-J3%qxEMO8aZ$?6G52i49$Vsv;Ot6 zs2~FX%c_s#=f^8;aM1~~vmwQO=s$KW&|O3wClSXk!FA5fmg6ep|7J#a;M63n23X`I z4!Y3a6%-4=8lw$$R`B+r!JDOH5Dq(yXjx)+KTmcYRb28PoVWb$qW?4N744&qASJ;# z@us5o?Yd7JA3DBKG5$cFl*`gc)vJhoZQ=`>X@0NuHTggQ*w^)|OErJWv$^c}EWQM}hrwp6wou{RiXzBys|O;|3iOIH^0#j)jQRX*VrMnvaA`irqx4`**n(cP#`eQ1VTcy zHcPI7@--LO80*DNOxO z8Dc-gH%_Grs0RE12D80}SBF%#SF$v12KMWze48##xO8YA1oCkCr9YR2or^V{pMxK} zUjPefaY`A=z}byL+<5FvfwxdGfZYIY2|4yb;ic#mF?D`3~lZ>5To<5qjo|ENzG&I16_(r4f}+QadQu5S)2;%pzb zvNEVCxc~rrAiC)05nro7YmA`*C?*oD)n2b^O#SkFcrmRkjk$E|wYx_FO@h(prSqYH zY#(+9dY(=o1B9}mK0wbPQ~E!qO1t`zT};tCIQ;VA%Y$Gu> zbb9M9o1{H5wX@Dm>lz0K8W{0u3rnlkK!V0QYk-4OW+@rmdaW9-Q^+pi@r-kkicZq@%(UW08wK>iaSxzVwQzUvx3 zMY8uz_8)?dGu^@aXC*q&c$mM<|C{*#!a18v7hxncGpFtPyhpmWz6;X&ZoMypb3vD4 zT1lFxJQfcIy^5ITX1NCR$0UbAb0rZax}@^!lGJP5x|3Pef0LwMeu6_nok;ypdlVT< zyxZ4Xuxy`glN||s<}45P?urxF@&k=iVB^ou;OwxLqMi5z|M7vw?Bm_sbQ3C`{nSYz zA84;1pc&l%W|owTsq!XBX_c=QDVB3Xr)*D@vjXs{G4gzE4X_0x=`OnaPu5lV-#(%* zsT!Cn;l`08ixA=d*$q>-!dJI{xX~sk;QY z(3=9ZyOCyj*t7Kjhc+uVTAu^rr7QLje8>EhL_r+thV*X&JjJJPmtXqyd+lgl>e+S4 zl8($#JRve zLkp9D@~(lTfeL#0`S^#+C&wX~=JOD`fsR4Hm4A7`ZY_E8QWMxjKL)2XCrgI&ZE3C# zs#mgV0sjJ8Cu&Y(D6^e_&);1d^}Lwb2?$j6=LFShfhD2WXl`{y z&nB&IDNq95WwF2HbLX=DJ>E}=S4?o(5nR=mU?fKC&J9b13$)3!K zaTkueg74Xqqqtr>I&W6sV{|6^PDlAA7kA5G%xg!F!Jt!{D$rUqG(<3J&6+cWNi>t? zUorqu18OFOpcJM}4>K9}jMl02D5w|5!JxGrvw zB@Rh(*|9D{%V6?vy=-z9Z62Y=X3gnq!mzJ9MWWus#vH)dV(*PDfn9TAy8FUEBp4!- ztKKib;m`7G6?BY%qU%{^>Ea+j_?tKxtYeHWeM1JFLBEi$dhCpY4Xx7CW5PjsEzbW) z+_+7~A!Tm%C6E$xdc3z?kgPARxP6baw`w+M_`S>w3LpMezv7oPqq|Kafke*ek_~48 z(ra$}T++TTJBMI_W3pOxm+xuDTiAIw9rA@cZfYeXD&P>XC*x{C43bdV4?rHrm2*R1 zUVgW$aJOk;^bd&NWjEgFhpr14X3hTM69KdjIrv^0Yc+-;V~yS<9;wX|nK|+{gXu}b zKhR&k=T#*k`cqlhh84cQh4&p(B2 zjxiG^>4PKqjB3?ZKHj9)TMr%G1$NytrikeC-*79(T$54L>l9GIM{hrnbm+y_Z!AZE zeAHTomoaKH^S)k1rYnyrNA8EFRelq&y)O!6yRBDN3>oIj<-9e{SOw# z?20p1g#0v|z1{ZPk6#Or0Klu%V;as4!QxIcmP_}$}SpNKHEh%*pGaY$IE=hwdYZq!KXCh zKEv<7KLjiZIVuMf#w@;P=-)nvOAq_0ZqvG3~ke@s<1^FwA+_78o z)!gxUSJ34+lF8;y$ZslCVITBy=^I zY}H73rZH@ROY&@m0hZpuj;7Z}lk?vJX|88|9tASuD%fTx!IOo)Tt0xyqthB?r{Kff zH@duapfwdZly*v;-n{|9<>2ke`*rkT1KbSmJndjDYMr^LVYURDHw9^3WvZTIb~Bt^ zeb<1jy8JK*x~EhC;Asb4NZUZ_ODeD^e}YPDnI~oyqO~)EE;DA0EM=UD@Cd#o2-&;j zEp#x19wm0x4N0ls9q@PMUkX>N?Tyx?BMYUACvBXmy5491aanBPzOkX4xHEV=)<4o4 z-%f$d0kA#kzqudu5A@#urkt8jyVQTBL_6B(61;^hB`~BPen~v`dIJ|^U138?CQErN z^n9(bkWQ@D5TX*vqQ^Vv@Nx<|_LB$C%&@zhRj)4mdC`ivbM4m{AebBn$8*~G@LfD~ zty=lXe+bI^Udm>NC1+EnLjGIb`H`Yaz3IV0*AIO@_4V%0_A3;$iSI;q7v*O6IdQvb zw*VQjsqay}Jk+)ctu{p#dK!bSfxo<+4Ua@UW|Ad_5rxrvPpj`|$~mddW3L%4ERKz^ zFS@M^?tGX(CrZ2q8T@-5v~{ovlBwoL;~b?ECv#~$dcMS9w03F%24&|OwP@m}I6K8w;5Tm5IQPJNzx-~4~-9sPfa z2;Gj9hxoQK^NznqQ_tg-F1{t0xgN3S;q|=MyGaP^s)zyqbqL&FOjxbNvEx}O;n52x zsw1^AW!yPw6DI#?Fw$;iQf`Tma}GJ;bzFW;BNjftjEB&NiT{HP)8zUnII4K2+-Q|D z&Nte=l{B+=20iFss(mxA#$iMOw+GFL@j1Wuy0O*Q?S+oUGQ9*_QFuePFHj`H3;vdOpI3D^xn@--HazF z0JJmf5Ivle+S@Thv7fG(TY_Rh9h^|&V=X!?Pa_Jbt_3)Ha+!kNlKd{ zW}3}9NYdRy`lo)JH(Q~NVQ0ftS)j|<)Rg3oSJv1FI(24nrT&{H6q-XeO$5qqTb~ZM%Fn)<=Ibf?frZXL@K*~z8wz>!3chg@#VY}`78UMwhzP7uS`}WKC zc`@2%2K|oI=OV6&$||?^j0br2`Jahb5WT~2rH6uKxLg95Wr_S~Ws%5Qz@ME7Zdu3I zq5l^AyK?;WrvE0G;{C-_mYpiH0779kCh3;`n^#pUJeszM8oBt5TE$l_SxAjqDLS@s zorJ(1YDG@zBb@<={8D$Q03xuWA>ZSWX&}A0c+t(`c$L#}9+cRguecR%N)3aSA!!+` z)a{gm+}aZC)d5bi9T2{bYT8kf2n*eOt_r5094+W_)aqH)8>4l*<*R7OMRVztLUun~ zcC*CEk%x%w9Ok~foJy~jYhuz6MfK6#M;sS08r?W_SCZ`VxjB|6+SV1fJDRGwk%)pm z-iYpc9T)x3ZqD+Zh8{Y2a6ER&XsMGr>HDcvon$kre{JDAj{_=S`MgGTy%Qv3NPn5c zXL4!-J8Db5W*G zl#5N1k`jalJO>D+ueI|PhX7kZq`&W}$})%1{*Aq9b``ds|9jW+G`{Wi%DL8S+F38v z!#yOX$eoil0&g?Gz@f_I)Rvcn3I%UbN1ohbKSC&=i@N!%{{{+B;#^+GGLm*pmuP|T ztv_6m3(h*0kJScA&z&;pN|gXl22x@dv(Huz+1QPjn+?4n`B`?b@me=F+C#c$0HgS7 z(tFfvl(o>j8Oh1q()SrdG1;sMc@=#V(6`n^ z^qnG`fzOMhGCvFOyxbp+

cc52UjDuO=)GMqaJt9qC%arM zFE*TdHG#E8=cbR#y+i{S{r8K`E#t0++x~W$@QIuGghl%Pa#4yQY-kklNK|ri$XWEh zed3ik2wt$SK&1G$9lP$Qn#$yfr7@x88J@tIKxT4{9%0Oh?Tzh5|2^qEpG4?RJZRp7 ziR{O_iGhCB-+&Y4U6%bMLnWi@HGDs<_sza`pxf_V_0{)$$6;siM)QXATAj_DNRWJ_ zJ71gmpY^}(E2->B0|E$}w}7*eW~cOSMz{nbuEžIq}yhWe=r=q3!6Jn0Y*f}|M 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 R4dnm;002ovPDHLkV1fdo>NNlW literal 0 HcmV?d00001 diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/lib/bitmap_registry.dart b/packages/google_maps_flutter/google_maps_flutter_android/example/lib/bitmap_registry.dart new file mode 100644 index 00000000000..75b35863b8f --- /dev/null +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/lib/bitmap_registry.dart @@ -0,0 +1,136 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// ignore_for_file: public_member_api_docs + +import 'dart:math'; + +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; + +import 'example_google_map.dart'; +import 'page.dart'; + +class BitmapRegistryPage extends GoogleMapExampleAppPage { + const BitmapRegistryPage({Key? key}) + : super(const Icon(Icons.speed), 'Bitmap registry', key: key); + + @override + Widget build(BuildContext context) { + return const _BitmapRegistryBody(); + } +} + +// How many markers to place on the map. +const int _numberOfMarkers = 500; + +// The name of the bitmap to use for the markers. +const String _bitmapName = 'assets/checkers.png'; + +class _BitmapRegistryBody extends StatefulWidget { + const _BitmapRegistryBody(); + + @override + State<_BitmapRegistryBody> createState() => _BitmapRegistryBodyState(); +} + +class _BitmapRegistryBodyState extends State<_BitmapRegistryBody> { + final Set markers = {}; + + @override + Widget build(BuildContext context) { + return SingleChildScrollView( + child: Column( + children: [ + AspectRatio( + aspectRatio: 2 / 3, + child: ExampleGoogleMap( + markers: markers, + initialCameraPosition: const CameraPosition( + target: LatLng(0, 0), + zoom: 1.0, + ), + ), + ), + MaterialButton( + onPressed: _addMarkersWithoutRegistry, + child: const Text('Add $_numberOfMarkers markers, no registry'), + ), + MaterialButton( + onPressed: _addMarkersWithRegistry, + child: const Text('Add $_numberOfMarkers markers using registry'), + ), + ], + ), + ); + } + + /// Add markers to the map with a custom bitmap as the icon. + /// + /// To show potential performance issues: + /// * large original image is used (800x600px, ~330KB) + /// * bitmap is scaled down to 64x64px + /// * bitmap is created once and reused for all markers. This doesn't help + /// much because the bitmap is still sent to the platform side for each + /// marker. + /// + /// Adding many markers may result in a performance hit, out of memory errors + /// or even app crashes. + Future _addMarkersWithoutRegistry() async { + final ByteData byteData = await rootBundle.load(_bitmapName); + final Uint8List bytes = byteData.buffer.asUint8List(); + final BytesMapBitmap bitmap = BitmapDescriptor.bytes( + bytes, + width: 64, + height: 64, + ); + _updateMarkers(bitmap); + } + + /// Add markers to the map with a custom bitmap as the icon placed in the + /// bitmap registry beforehand. + /// + /// Similarly to [_addMarkersWithoutRegistry], this method uses the same + /// technique to show potential performance issues, however the bitmap is + /// registered in the bitmap registry before creating the markers. + Future _addMarkersWithRegistry() async { + final ByteData byteData = await rootBundle.load(_bitmapName); + final Uint8List bytes = byteData.buffer.asUint8List(); + final BytesMapBitmap bytesBitmap = BitmapDescriptor.bytes( + bytes, + width: 64, + height: 64, + ); + const int registeredBitmapId = 0; + await GoogleMapsFlutterPlatform.instance.registerBitmap(0, bytesBitmap); + const RegisteredMapBitmap registeredBitmap = + RegisteredMapBitmap(id: registeredBitmapId); + _updateMarkers(registeredBitmap); + } + + // Create a set of markers with the given bitmap and update the state with new + // markers. + void _updateMarkers(BitmapDescriptor bitmap) { + final List newMarkers = List.generate( + _numberOfMarkers, + (int id) { + return Marker( + markerId: MarkerId('$id'), + icon: bitmap, + position: LatLng( + Random().nextDouble() * 100 - 50, + Random().nextDouble() * 100 - 50, + ), + ); + }, + ); + + setState(() { + markers + ..clear() + ..addAll(newMarkers); + }); + } +} diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/lib/main.dart b/packages/google_maps_flutter/google_maps_flutter_android/example/lib/main.dart index 30665c1be23..9fe2b17f469 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/example/lib/main.dart +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/lib/main.dart @@ -9,6 +9,7 @@ import 'package:google_maps_flutter_android/google_maps_flutter_android.dart'; import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; import 'animate_camera.dart'; +import 'bitmap_registry.dart'; import 'clustering.dart'; import 'lite_mode.dart'; import 'map_click.dart'; @@ -45,6 +46,7 @@ final List _allPages = [ const TileOverlayPage(), const ClusteringPage(), const MapIdPage(), + const BitmapRegistryPage(), ]; /// MapsDemo is the Main Application. diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/assets/checkers.png b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/assets/checkers.png new file mode 100644 index 0000000000000000000000000000000000000000..444874d2279ee0368026350c0a99c33953a9c59a GIT binary patch literal 331719 zcmV(|K+(U6P)bX*+}F%#OB5yX&myHg<7O82uj^mezpj5>|GNHl{pOs|Cc|1 ze*f41l?7Wg;{H!z9PfRKT;fl=m-b4>|AKx*T>0~VKF|B@^SAx}1&!MkJL5%b@cn=L z5C6gb`~UI3OP>6nJKxYEv7XWKlF z5!Em*GwD{7JSWCcWsP;-3DAn-+k9_731j{SL*6>)JZ$T_CRd97-~Z45kNt1|@jr6F zZ!)}HnCNjITw?vfM@YL*{k`?O$?r?uxAJf4w)Px)CgImE`W~jV-2>KFxVcPwLx-_S!e%p!6K*-V>Hy-50z z;-vU2idx7x>xL?gebQ^_h2Y2X6(#c#yZ$dg2BgA zXO$6P(XgddIX`PZ0A?=W-7-yxj;@bpv8!kZ5L;n$mK zRK=!~@%69Cq`q}=MvqDHj6fpik?&1SMk>;z;hny$)hR%@$dHWZa=#6L!H2K;V}E~p zK`u7=eXIZJUJ48y$EEI^6TRmL9!^|2%EuVEPS46VDe|oP2)DCw3c7%5aA_-W$a!XY zueD;CadU7iMtt>?2?L`%C3RBzGm(_bpyNoHhx0MfgOIjX`i}+q5!pxEB|~cr%Y>Bv z$IyS}FKp;i3OsqT3Y*D=PRYr}vk&rkEZ^$?Meq^wPwBt%64K9!rw@8fmfp&QUjT8x z=weUwob__q2-S7xw_JY*J+R*2i)@LlT>=sVRspzT%=Q4NMlW_N zI{;Bz=LYs1$v2RLf26-y18jQ4)r_J42D$D~QpQ;m$DqX<&tCnAZSvIiF`mB&KEgiO z<_nJ4bgcRRPGd7^G86wqtfqu{FKm=&zt+o}sLCZqlhs=_37B5TZztLg3?k&ZU4s5U z*ds%Ok{y~isf@R4##Bg&hn2ySa?~|AMFC~R1^X3oUs{l(ccDrtOhULo_ zHL%|A*_YR(b#M}%lc&5)!w(a3Gz4%+CxH2l^AwQk$J_BrqZ?wE#WLFjzzBBG*hBL7 ze(v7WSf&vs?HuTef@>b0LRXfm=ahL`% z6Ar>7?|tAMV^>f(>*eCXMS99`WVbZ*F!}^eKXeKV(nDQ?@Q^(tJfUn+G9@t1AiK4f zS8p=wv`29Qbf?Tzlg*+3<$O#f{bt%01=0TjOme9+3!X#Iq=gS7tM62~FP+N!8|c_- z+GfWE&^Gz-3;m=0Jt}sPK0e>ZLSC#5y!C&be7X0kySEz-|7JOU0gDlb_MEFQUBL#< z7##Ql6F~@_vM^X%fi{{)6em^ISo+UNw$9$*fZ{6mu<>%cH8-l9W=X(K$G903&1`n|Dp1&eRi?oNUfom z0pK}lKRuH%#V(r;e%}3?OYm`B8@ppG_*VFkleVYvqkoWqcqdF`!-Qz597Q^JurrW2 zB~%Tw8d2|Mb!ca;+ny(}#bgwxC*?cf6DV%Ve(A1Y9LR8>4)lS2d*j`G$mqg!XoKLR zW&^~zN=?+V#6?F|05Uy)%~5YK(5GP~@A1cV3xzxXl%H?Y9Xbr)Ex3GotC zbz)7)(oj>rE8FD+YcSc^8A)eBDP>4J<~88(q94&BPsr*{Fx3Da#WHL}P7VbxgH&TY zud-ZT$E%dFuVn0tiwb)vztV0VC7L{HIdw^B&daTv5?H|&INfL;XzIL>-tCIG&Hk8h zVh!%JA;5*Dd5S6^NP(neOFqLx<}0v!qOzIpu^Z{)w6p99np}sT8KYP-8q?rsJCyzY zqyP8}eJ6-o%po-u7$<{>=!voj!J4U^*)PZM-CZ(4@Mms4cV}T{vKnoSD5jk!M5kuI zFi|y|duz4PVX!5WPJhKa0$1@r7m#w-G3#T1)tmZc0;J-F#;MP9ziCEUVdzJJ&}B1K zE-R>jBT|;fX7>s{3E&8-Y1S#z%kPvO22-@lDT`{q;kiBY#76gIH88r5+Ig{q{ZEby z4edMHsj{X2^l1nU4m*fNK8me6v>0N6>^J>y&PB|4t$^P-_^7e>azEAtpT8-{N_+AC19{rcpS;&5*UH9~CAEIUwvYWx98OJ8CI6Nipv zNP-m%J7QMCUpztHWto9GjB*z|_LOC7L!UPMY3O4}u3d%E%Pp_6>^yOySr3BD3NKQW z$_M`Z1bjS$L1+q=-t**23aa=`tZ)c=NLL?BEgO;^S<;SR=@oxjZUdyF?p4rc(4(YI z^)>L&KEJ%~3LhVx&9}gDH!_hj5}PEs`_?8iTyA|Qz#w5}WyD9nRl$~FObrN^;3JJB zAbB?JI~)zHjD`0%;$a?phh6pcE5(Vq~m`FZql)9r6A zZ5t>4+>g9D1tkqPGBQ@@ay`$p29KSz9kNFngU4za2v3{j8N?vy$aM`L7Ubf+Q-jn2 z$eCSrTzz~g&71zG9!bBNZPOqcpN-(KFpDoPRF|R$QBLOv{88%^)PMD?;9EJ%ru#k8 zx?JD-4_5z10uL4w!1_zOKASflEH=LFqK^+Znz8<>U)7W#s&Nw?={{r|6wIU$b+9ny zMro2(ErdToaq7pC4}$O(EKgprTbKb!bns@Fuce;gnVaIN>!m>n(CX-;0xh&f*ZDW- zkRqQW5ui8L&?Rdeycfc+bv1~Uy2Jd*Hx0X;i4<99+P1wV`^ZCDa(W{ZO-H@632lJN zmdrXVa>HmU|20*ji!dNMW-g15Q!_%#InK4Kof|K59QgOQc0G{T@|vzct)GCc`%Nsa z%Z>`h8~y$2FAebX@h6$KF>zPNQ6rf*ql2oqI(9ecZ|`{_ik{&8tKU({-7_EmzT_3tkLTGzeU?zKCUZiw4wQEb$r^(C^4*FzwqpHH?yX-_`g%AtbR z4IKV4e)36OrHfp0D{tu$))akW{>chcO$~Io%Bosbu{jq@h<*au=T!TK0S}-tME{cp z_22SbFm%(e0JpeU`e*8;+94E6{byid$PRKhW=+Fyh&@npv2_j|5H#2(Cax1EGWK%) zoo(kj9P6L_-uFtcd7STPsNFy5-jPmsMz*9*bVU6gmDjO7k)plKFlB#m-*+1-b3g5H z-V+{?{bziW65??h$TiUt+aS$0UM0z}q>}pI0w=c5+nL)g0|0LWfENYmYCg&jKnrAd zoCwB`7J!UvaAzO%AjZGufEO|Q_gqDDmWUZepD+$OZ*>>0Y<>3p;9|?sgWJC5hhPlc zoaW_iJSh`J_q9EjuU1uU-C9`4(?$wAi;#3bJZEJxgk2tmjohsZ;fcJd%*b5^N3~?w zIe{+JmAjBW^j`vL`NLf)Ie(1ZaPC~_Jsq?R(1|zaPErkTU!DC37HP*m3wBW+6{?6= zAvyvJ+tolC^w*>@v%3*-72vCZZ(7vrp0Z1=%?oW|bmLojZZt$*)5?aBA&@}kX9Xog z?zEjx5$MJQ!GVl7$g`+YEEg~`z8G3Y z_An7)V@73Ua6U^pYX#^<8-d06iA9#3918nT8}yO^4Y_~oqx$JU{iu^)UaH$_-;&Tq z_vlmxtxumfAeN~^0Gb z=h5f6jgoW16lRAFyMtcGRxk(d&=oK=^xq^<4j#qygSarBifxeOvW|~rU0Y){tK;GTK!7BTUjHth71oR$&P+$NfF*aoo^!+jkAN^7@S9M^W;>hUSf*v=5$k)j6g#gOxCkGB&y}7$(T4*o9uxnq!Dq{CJsL2+v_x6{f=$E`J9}|V1u^Hz#}H1 z{6DtcdXmWUd5=gVEEcuR3bDnQT``XJtX1ke`0*Y%r=o! z1U*z#yIh#oocUp#TfH~lj~9T{Ejv7cWArMFB%L>R!G8%7AFc~9kpV`xk}B2R1pqwH zh!|jW31ZE??40C0QqWb=ggcoBh+;-Hfi3atLV?k}>^Ty!oT3C8(Iy)PQ5n&#PM$|D z3-)~eX%7L%RaVc;%6rU_djkcatMyN7dXzl{?gu*U`U?Q0^0);9Uk68n)+|2&);7Nv zAUoAQn*oHxpEIm2d%MISoO%=29s51#32PZw(Y>gnSbDB7+^hv2k{PC)bq4`n^89)< zoa<%im+B|jYx=*NT*|={K$T0ZzVcP(U>!%XD3kcuiB1yjv(L|Rq0I*yXlQnk_me+3 z(LKvuAPT9r2)69P+2ryAr?xxof zE|t=CNFM6f{f)sdJvuV0zf})dNR`5ZcBk3YYG;hVXQIwJ}vl|JA{Aw{i#eY zoF6h~axAm84r>mhG&=h3h*{LG3C^$RoNlCF)Z!~!89TwvuY96mGBRKZuhLzVa3Z1Z zs-DsR=bsofD8FGFhWa<*s6(Ah5|!;>B1JHXw2L`JOO>#+?XCMLIGwF$)%+_g?-wD}lGwgt4`cu}k;_`t^ZgE<$Otol`Rp1eaZ(4f$ z`@4Lbr~Z4XLm|ct(90pO&WsUE`jbimDzL@*{HN&n3`mUkeyJ0OphJc9MDOd%xz%MF z;kwxwz`R^nXQqOBqjiYjPc&DVWSmC3un+T~YiVlpIBHK+5?K!8*!@zh%uNIg<+`ze zMfs*Ow^Q+!Py^Vfa@GjTFsHLxN1Gn7vj*wYmglaG&FT8nhi+Bsmam_;I2RK|dsBYN z8u@64wi(X%tyel;gIwF5mb+X#2LgPCleRCjRwzH!2DnY4!pL;ZyFq^IBSpm&ifufL zKBE1N?y-CZPP4vG+~ML_T6H@Ag_I=wL$FoPCDlZ3s|AZGS*~;*`H<^!7U-{n0?Af+ zHVNr_Gf$Oj^EoH#AZ!3OvkF|EZ{AV)MWVpO={U~k|8Cp)r5&S)&<{@IH-=%+hByNp zT$oSxZQh6PXvw4xfy}&ynPE>`)Wti)Ke;!)zU@8K*&dQt?@W8+r8ooUV&-HrhfvWh?nwv(Xvrp}YpWn@#nP>|YZxXLo|S!$C4(2E7BW#- zEma>QcL+ItGLibP!KVV~#e#=IX`2)*j*zAHC-Y>Pk@g?4w zwD}rBllP+W*ZYupv))!|Hm+Pvts0Iv^FI=r+VgR~Didlp^mwbgeR`Hj5>nMwKHJnd zTY{BG9toMe+0_(kCmXtRZBaUzO_4;(-ISIzn3yMn1rT!vEQ!p16MyBp{gF662kU4{ zIgF-nrdZIMT{qnYv-+Y3Lu0YKVP&T@S)My6l7zsnA??AseyYjc{KkjRDhPf6>}N+| z@8Bf`mhbJ(OAJ2ZjdmQA>Q?tJ%e_{+6gA>II;F@MateJ1@4>T%luR+;Fr~V+R?Z^- zv|po4oDB3{L1kwG;OWC{l&s%w{Q-6{4x_8nh{J28-H@C zzK5MHb`U~}5gCHowMiJzcP@^oBvlu7)t znm1i|EgF_z2n%m_L6$#idKF9zmA`?PZvD0qOxhE3U1_Wx49Mq@ zT{dHI-H&P&8*W`z8H}$$*hbEPT!kF#^4+GI2JGwjAF)dE94Hr@i8uoTTmkXoGHDt0 zKRMa(j$`M-+8S#@qv?On%jyGK!tf+SJn=Y5odD3>+z&cD8RM(=9Dq(7XynKaj>0}@ zW;CGkT6eay7iV}7@;BPIdBMHj^*f&mE|t#cFNI$3A_!so6$6`?Q{38Jl^1BMY-Q(X z=@)>F!kKk07D)$Uo?wPGfeTnjDBq_R&TtuxCt`=AlKx~0;Gy!!Ogb5zM-3v8p}_5x z0kd%yvYb|k8~SsfUv(Oi38$jeWPGb1Iayl3x}W6uWQ^yv1wuI=M_z32R~JVNSCMN3 z4sybeRmb}lxqgtQKY#vgEk9e#Sl0qlFuIFoWr#uN z)54WREuRQL)E)pQBP#njB=)D9EkU_Uu*eVJ8hSLA60($P|dZY}Q zKH8529AU;F>pm%$vO>qc$-*}_GI`;c`viNTq6;q{<*?Dy@{-S)*?pt&ey>LH=;0+|qBD8Vg4yD*2H0%$5iL+?~GBtl?45XU!DK^~7@1D7NiO%L|5R{qvM=t~S z-oBUi!0R9X|4W@%f=HP(%2aPByVXTG2E(`$Nbb`1^%E?_Ddom7#y_V+e&!^W&%*~v z##G>uOuguTGLaZ-6-VGb+NL%Hj^_^j573~uBAZkFF%Zd5JVifdyO7+Cu=VJcm8#YR z`8NP>hdws}K7pM>miQCxbB7oDA9y^z|H7Fy$5$X^*7vprZ#2#>#);9Z%eHq~+jIm~ zKYE7toau6}gfP4P^9;lf0g=PWSbnd&TV;lsQH><{R9M37Q#lzF#I)uLs_bC*{#<>l zl+yev!oFo1s+wbXtxg(^FV=PPE(LbIJ^(Dc&_D4b2D8c3C*zJu6*SOZi`CunP2-~D z>G#@t-WO@~adS>-s4c{0!c}Yy3Wix4KC~}S^3R7~W>A?KgAo!I%@b!xdeYRc6#iYR9Ab;Z^=7le2!i+`rPjm>-BJJMT*O*mjg{J{1z}O5-AO z0|3PChmnU3@HZ%Vmr*n=c`_r)={c=M*{Fn$Gu|bW>3|I^CF#ya$5Rq(A* z$v*sKEu;HzBOcK;=e2;AU*=Q`Am<^Jhxg%mQhb#^r`ms zy_I{PuFCASIng$&o_TH6`zc8Lcn!mQlAE`{CNAZapM%^WDG;N4qjBh`x$Xn+U+H$l zWt?=c5>0#gz3idM7J>`S;MP^%|h)(DEQrnFH zEVCB(Mh9E|_F2oH`Ba}E`rs1`y?~#s9Kq1dt{*PH@OXMZ5Q264dFE$!6ti;y!#{E) zFah_CuG3B;M98K8^ZLW%8>yc^%a4G8lq0lf-AxbKe?F*=qacuN<45|22V9Ne!`~Gi zBzRxPP^?diLgA!o2$BNFOq_l$ka=5vW&ML0>!$3_eEfRak+av*dA75xVO})}+wA+e z65yHHE}JEqI<;2e84lJ8iodKA6|w|%<&@F|luyI(T924!czUF&^l zVikiqg%t70=s99Zj73{5%SB_NDn`5B1Yj!%3*O)b@}~Nd zTAr0io*^)F`1z4SbQajj>4`Rr;Ul7CY_13_-WGt|#3Z%$tGcIqZ_Z=2oAOrzhUgENsF6j+l{gt#2OI6Q2SFKe zW)r|uUv&;@4EEtl1&vGHkk@Z^ESTbMz~dm3q6e?+P3pTP>hddnen(T=Sl7Fk`mgq( z^AW~5Syh~<3%Sz;1k}*}xqf~;#5tytQD`YYA;&c~c_SMYh>K%^!;JD*f%>L^igd~` zDs8lL$MGxocBXs{(JLjdX3RKn@6I~}9umaB;&dlk2E?0jLd0*fdsBDM>qrrZvmCqy zCA01MF|2-7xMjy> z+4=NQNv`~d9@mQbBcH-w`p>olvTjDReVm8=>WhH4>8M74p>0$KH(3^#}zNp$aOAMB(vxq7kNjZf|4GVh*2Z!5})$AjgOhc_s*p6yBiBkZJO zi>k_)*j8TUSDp_hy96E6Y`bVtc+b7lZ_lq-i<>YWp~AMO4XVXE*~2+Tvk_MT;~g19mVBR6htk0~lLiP1+al zj%~+vlLnnxhRDotR*sQjFq{dNY?zIp!;r;007e{2bp5=FQaP}l*+<*naZ)bVRaV64 z`=S0_!v3zGH(7P*zpSq4Z+X@;t%xuAjN@B;gk}45Atf|x26p1SevHye&f#EqRHWw@ zQ~;EGSO&6IAc$wkQ@$&}$X6gH*Sc;cyFMONtc(?otXRA6EA8lQUE0`9bwZW3O%~?J zDB|5JyQ`xp{a101Qt%eYm0Xn5d%I}E4}O9+K|srm=t*L>dWU|55$eDvI^7C30V<1i z=<`PV%sYal!`+*DG>~wl9RzOD&%zJb_2%&pZ+#_6)E)K`peiINVQ_-h5&U)^S4ER^ zg>w=Zctqt9D5m9{tjo3~fcnt`0J)Keq=A(VUF>4hf5-7i?I(dnXvyleUMUcw(PiQ%4YM0gO*M)LjDc3DIowVx!h1Wto9X z`ifw6Vx9w_DEV^8RoYy9EtRG7%h6i-1grD^fm=L1wE`IEe@63pls$%(Ok8^qg5xtF z*7%Q_Wt4H^`<8BBxBdNbh40rIr+Nl*;Z@-#UX6K<@6ktIerTexcc@Lcbb!WF5943|2uzO6Qb z9YD?CEaA8g4uj%gc^qc;HvP+Cx@%7(9MZ1WA(QOy zZwxdI{EhZ0h4FIT`-uK|*0K8)hhFHMM!gp7ywZ5S?df>Whgz2Wm_>};z22H~nQP{N zY9dz_*1tNmIYTQe3K@o6CNIv+Zt9o@-aTl@4F(rlu=b|%Ul}{q|G;i$Wcwxx$ihVl zvn9Y1K%xQHKF#V}DvE^vcd4^$Or+ z9?z8wt=eg{pd3F1{5tpLfgWCedVcNs6BRrlSU}*xiehJ+S!I%_?NID`BIaR|i=0xC^;O2*c{^R)nVD)YyzR+W zgWfp#&tN>g&pPA|e#9q6${x7m(er}=j#L22i=}T-{STv_@CYMExAbX<>3aLqKWe`N zL>z;w=rc8GSno9^Z3RE>uL3NCu}>F+gB#G1MTsxyo~&PXgcZNHyMVEsCwyvi4&;Cc z7skn}-(@rdP9zbHmjYy_hTo>M^g&D{K{(E_FG~>?VhK3pe$?rwodx7bbgJjp+at)` zL&16Eh}@;eXDp9Hjf$-OX6{m%lGOxgmE9igu+3iIl9KJ3=)|EH`dk6kVfN7opUSP> zn@$3(z8|~#WRO4da*^YmzZV*ISrrK^{g80@_Db1vKk`#qA=%b$T$mX2$9g9v$kp(> za6mL)A;wz141t*)4Gx57j5{PKPOt}GvOr4)Q@2?rJ$?aK z(3=zQcYPwK?WI-n64*`F!y1+1Ww|6v0UPzlkd}BjpKp*|i>H4*){#jtmEpV#khVZZ z3r?vR6{xCgJr!Dh)8$B3qz5+*d=kUj=?VfJ>i?KCF&my^Hw*$9=eCNW8EaRc_J>dC zza~ALUz7Tk{{S}70N3nRyI-#|F4KiE(%RT@25Tw=ir8@GZuFjSon=ME3<@M@*v4lGJpd( z4H8vHQhv`R=vX8qgCz0O7(VWK3b;{VuC)*`}GG?T^GoV7E2!E^0 z9S>uAbIv-(%qnkL^pl*`8Qp16PvGY~+JijVE-$MvjsXT_y%~--dMu31z;F8Z5?J4^ zV+=Ha=HQb zWzxgK)ZTDeUCMEele>GUA@l0Z-())p(rbsId;n6aghN?}M4~dRH38E?>W*9;QE|VR zQbX!3td5{ChLnU~wn?Qk(FM`*q(tk`_1}gaDM=OGFta088FIai{4FRRbdfyRE_XYq zk}}&+EBx@$7v22RiLICN_<*NcUAw4)BJ<}e`!f<9#21#fb=tJFdqp|q>y_7gI1#)W zaYV{@ybQvjZ>(EEugt?U+$rm*Lo>DMe{g{#V9$MFoupIr*bfF*KFZRTWD+Z4A|u_6 zuX$sT?(nT?SiBlve+fNq23`zo*g-K~E;xga8L9#5j{M#3PmQ`{sCfV1dWnPmTKR(K zaS!y?pEBf8f{+6A%b>szk&=~Ctjel*0~6$78A}1@hM>9RFL=x7$lSs<&=gL@ymUW zB_))pxs#GdO2iw~F2xyyzg~*sA)h#JZUTaGsMz^zKYEti>lkYel@nl*jK;Cd7QEj@NROf>yxFU zDt^KuieX-9aR@Bq+^E0pX?oMd*7J}#Y>&~5oclvWHvElUlGT1Iw+ns6Qv-MU!Dej! z)4E=o?KILZsdY=*2mfD3U2W^qp)KK*E7xAF+w9Zj-8QM;UIVFqH8}19FPSLFc8xCp z?`mpeja4Sf>4_TZfzgw;fV6MH5rG>`=-KfppHH<>cH*CWgl%`*n7nKrOe?nun=2sG32aJ# zB%8I&R9FvMYP>MD(OzYzK{Oa`V-%0=&H`H8Re`*Z<#+9wEJbAqlE*kY-(?uK;AjaN z7}$<`WhMc-=StJIspW+B&-NnwZ6-eG$s$^HM}PDE42pc~ucW4zAFdBU`AvqOrXT8^ z+Pv2^NQV(Ft+u4n|t~JgA;NJC61=csa_Aubh zfu;RRWvq&le6Jo|u?0Lv--QE!NPFe!L|2=iHE*zGR`r_Gw>pj!#n9s2dEUJZi*qSV zH@@21svW&t(-NM8&37C8t^ED|IljO~Vc!Hue=g3JjPu-Avo$Oe$u-z)G6>0?50`poyHCj-mF9!+ zJ3ci>eqtgqX2Gl|#syTFpNF8FM2kTh7HB)8;ZweeBWx#o!Xh^tx$8#h;A|acyY576 z{r14#4n3@PHhMUX>Est@JGB}o+EcerI(B<+8~xI#l;iUMR<41zS#~(qaGG0iVwb8{ zwmD9`WW%zrOLmqKOq-KFgNAqMEoMhZ1Zgetb%H_+C1o$L17cnO`@99t>gM3A%^vW+ z@}B?J`7NUyG^uf;iEsMf&BEzxc;TFER3C=fiRK0)GR81JIpzVZzQz zZx=eJ>!cLdx`W>ZtjhBXngMf2)&bz;!V(Z|bS!EI@mIE%Q9bRaV`qx%yo~hPaiC~p zi_)>jy;8%;4>D$!EHdjA0A5{2O9QP1M@CaWjgob+sds9smP3t@9e=7Z^n#!d8Np1E zG4}C`GadzhEgu~4iLM`==SI7=xm>5V{sCBl?&|~}O1}qUU+Neyhr;rsZ@n(LoTQ>1 z-&lg+lz?bJ#RrGc&zwK6ZoP*B+h_Ix{2fOZvu?;P2AvHO1(~siSxDV9Le}$s>y@^>UnfNTCigUm zPh&s!ce3yLK1S`4B(XEfua<4Bexr@gGjX(Du#30tP{YJ9@CGE1~c@T%)U z)~=W?bbRb8GZ4nv@f@E_3^wMd$DzWe`n!PJqCJuUeTizPr-VN_Oy|SEJwLYBd`}*< z>68`*>RCDZO}kzv|BqW+*{s#ygRvQu!Sc9!i@fH9f%E1RVU*15nmGPSuS>YMgr20-Ml&mA!_Yj`Q2*z$`-*D5rXkAXd!Th_3%;O6#%%;;IB+7-B6y ziA{8n&APWM4(;CR+W_)6;nnf{741Pc4hr~2<2Wa+f&dZHwlwey00f%#p?aAOW-((0 z4zdf73-gl?P$5H_0$ow6(I`b8J4xkZ?}j5#n47+X0NHy?`4T+Kz=rsbV5yDbx6TXN z8gDZKgk2_%QD;!5aZIw;G*wX$^hvu4mO2n<@-6`7w&pYiLq5WG-9f-NgVEVujq^?S zw)?rp0(4nN)~o1iWO|^z_vs2)iq6aREp0K*#g`iUTr2Z~JQW4XX&9anamcWCKGd*4|V+#G@NW~zaI^31o}9&CokV# z-fKti)y>TZ01j<>ptfB)=hlG0W8YHG^97Gb1dr3D{P3A0(kVOMy2g%$=*RiIXO5^x z?NMR4A@ImgINmqxpToe#3J?mR^ieK5&a2J~sK zVQA@77=)CZcP1hQ+9aT|)bkumPFvUi?9ROuNk#^~GA!e5$9O4dQznz(#w-FSFQfM~ z`$=xgiMfxgN`HS6BDGX;xi`W4?Rvj^sQ*C;HbIW>dx*U=ksUuO$^3j)oG4}M3oj%l zz)6E=X^jWa+SfkbS6DJ$3?2f4C=3^}p5ESLS0E^MmhKC?BCewy#?x2#8PJFA`p*ey%~p4+|CY9bHgfus zssGQ%pHxi-O6ieJWD|BsTIQdL7n*UAGW}yY(~48L=27<5#01vS?T4TP_`As=zDh*tE<E37YtL4SQ*_hm}-gbN_ zXQD?T(sYu*!c3CkT!3r-|NGn{_)+1C5CEQ;&(L|mU-^o`%p_S?QgiOY zc+pyw*77V5(57uEv%Ck6F170Q4;k+#_`pzP-Yk`I$TH?Y#42$d59*xlbrcU$81IJG z4*HRxl)5$mlmf4#9*oaj?E{XK*2>V&mpq>Os%f*0UVI3WR`qv#vN?}MIC*gsDKnX^ z5WO#>IOMzq3I^a_L&xHq0RJUFt{J6mtYhWD>{f`NC(22>=uj{)S|2rPNVV$vpK^oG z2yz_255wZE{Iy>^3u2<1>3d{QE6^(VXq=bW#wz~F>{SnBowjR2sHtB{V{hzNngdqbRb*qr8Kv3pFBOlcDX2x8Hj!A1#gj?+zmsJQP>Q)^MytBPb)}uQ> zCYogq!`HIrEQ|h|>c4Ydxy&v*BqkRMPdEoYV3*aK+OL#m1-h7Z=*Ij8bZ5Eo{1D*l117;3KfI7Dd(#{z9=yqn1Hy z>F2VQA-N$AnY!n{*&6~>2IHnW2$3{k9NK%XR_bJ7<1sZxTj1+-i`s}W-je3kA?9Y{ zo!s#Wam_xC+Pfyl(>G-h^c4P(+x)jhj$b$xzud13p_MQlf`?5KF6Anm1ZP9I-T+Qq z-fwk~xw-^R{-x78md7}2ob>rhK{k!7naMBEQUbm^bp7hL+)AqqQ5szK&2Rn?XGM2} zESK&`c#|&=Z36(6nT4qBO}spF+rAxQI70)lBuFzVK*&6j$9%=oIX{QlAsgbg3u4<9 zAxhXRoGXhqGg_a3{i&n0Jl$GMxsV`4Y0lm@i#Uwk&5+wm*}1-?^f8W?xrq6B1X;(9 z2cVU?=R<^Q4aDWtG%N=SgIlD>IgO~T__WGLq2R8^V#g0vqTdVo<~ZN%-r}pD?{zBn z0!}M9QXgP+B8%Uq|3Q&5Ob-0uy4NO7R5<6fzFx6{Et#+7NMdTmHW7!!QZck&Dhuin z)K}Pc|3E+DO1s|yaQ*k$@e`2j?WE_N%~O51y^rw2J@G;GAwxfWe@!M1S}ehY8H3=} zeV@~C?4bWfNh6(!+O8TflTYFT65P>;C6VYBkUAWF{+2P%AfD$|7Fo)emmkW02z3Is zC3G!*`#Jkz8z4VXYU54E)B2RoEcse~Bw8Y@^#5-#iXZDp$Fwb#2HCLH_}m96sK7<= z;G2ZzO~-EIxbeR=R3DSsI^eYRSyhKtNCvXX- zGV6rQ2C`aabz~}~+y^UWRS@8o2+RG*Hz&bet!_r+>0bywby`rJ&-#iFm&~2pjxUB> zOd}s(8_VeHJ!R_vx;`2Hu!Dio`v-lw*S=rmC3gDW3;5RU`?=YGmCf-(R{If&6UGh6 z;5TYsL4*b$dAnA)U{-_$0ae}JH9Q>%DkNH23^QX(_8`K}Z(w6qb?ICI7yzmD{%N=7 ziv6bVCUDdZ#Tub=K4CCo1u*H4YHn4gIJ;pnhCS`pVXf6$jVli2$wBiU*5-GTkE0CV z$~J${0QA)>?6l*9o-K;fZwvxcZ#Q<19XB6h=Q(E(i(S7UH~=g2yq>FkN?>9La*qq> z)^@Vxxd-Y@(bZi9vz~w|6Ro+1WY(Mh2X}$W8(P`x*yyXhO5K5sBdJA@R6Mx^NSL99 zHC)xvtOX{vIUexTUg!0V9AjSRoux|}K#=>cXR$TnKsi+CpJ0^RwR1B09kpe_CPrKh z`W*X5nun5d>Z2CD0fG?frR;9-voPHftv>^IfVPQd$CluvZBL(2zM*t@=}BwD3f2Od z)G3a)dpXd_z{s$BgZ`pP$iobi-*RJ7^KC3H6Jxr|_=^#SI-T@uP5&`(EdW`FZ7$k= zy$akk?!!U6WvbZbNI1^UZ8)j;;21D1$8ilMc&?LEx;Q=1*Vjh-;3!rXKFL?tDXgAh z0Ki7J<2JL8BS~U&)u^_+QO8VJ!SR5u%Tf2do6`CmNpZFHzi~igCuS~J<%!MJH-_0| zroHiB)!nt+L0lTTOuL9HGs`I)Av^n9pjiE#<->+dw{pJ%o!I2y)5O`XTk&1H+4jAh zIk)3@{otg+_BpuENg2>kr)1Nq%MRGDf*HW;BKbV~u;yCMi8wnt>0Z;_ex|kuBxz7L zp42XcAwXWi1e-V7F=aT%V=|)Bf9R#<6q$U}QGalrE+9rmuLVh&Q081L6b10uro(tv z89~!Wt!CrXx)0)wbvp#iSN*&6dA%dXH3q=C(Lb58uzoY<`+Rq^UU6Ve>0$k@l+HGU z=gvcR*0TL0hwZ3q%4f>6)$XEpSFIt3E%N_N%xAIXj# zaIp`4w;|^t$5eZNxg#`puWS8!ZN^`pxYT&=P;!>u3_^dmEgE$2ylg5Xj z>XpW&{B-?Id5r$`f&_$^uh27iOYkZ?WhrPiX$^I_=1;M;XJsH=j6(2v4g3kY9YFYw zY$zQ|ftX!{r2Re*QDVx6n!N6DNCLck{|dS1A;Hx6c23{b(djXhRaD`-mDBN>;~MvF z+2kAWzI}*?Xtkgq~A`&P?EF}aRO(t|L~cYO?{ZeZ)w2dBJgOo zviyhzGoT6H3ncODIk{VqlH%aSy_T7J(DF0!0~C&UBzuCmi|Y=MM9vQ zh6VaM&6d<-ztn$|7O_jG9|D)9O24W*{ZgHo!BDjO_1B3E)=-k)Gx5Xc$|Q=eX}=Li z-Sd;4e9>(aBxPXsY5N>ZdV^BCn;3#Rt$tgtw8hw2dy2-+!P!Ms(#moAFL+8NfJZDp z7aoI-O)nckkrx^8HYN!~T%{N{ef|5K~mE`w$ zRvXuhZ}DU+z)BgysT8Q=^ZrMMhLPJ=R^zdo7{c}Sko%G*yOh87IW?`NvVE)HrsBhx z3fQ0JPwyR8==C}QRI`I)QbWrxSO8!i3f00?k!7E2ndQiGnUx^r=VDWKLsq(#d8w9V zi4>n0{3f-qwyQFo;T&%xrdfvV5*sFtmc4`=H>jbPgYkZ3CqN7Bk3o$UK#P;{oIJi{ zY(hYf<#y*yH|#>=)W0mCf!9x03>tQLt-7-K($B`{UpOe`IdEg7QMUe8!yK|c5SJMw zHOCg_$DWH;TWjV>Jxy$Wv~oNKHEVL@w}I9%k9@VtHb1;qRG&K84HmOvrT@c;CD&rQ z_(Y&J(4vlpV+w#X;P78@4!PCoaT%N$J-*$pXv2xE+%JvPv7SKo24XJYO^H5LP66#n zmIZ{hG1&RSe1%0rsaqeSMs9Yr6S0-pci?aMm6%7J#4fKbuN0^ddrlrhyDxhh4RDzi z*z#Wnza*Qmt1Pl60#g1t%Y-?}L^&D*CAAyM*3J8sjpG zG&Y^SnE*aO!N1+G)0?FCz6Jl;(BGSHWlLo6yFc)8ls$uHlw?Fvfr8=|B(Z(p9WHIl zJ;?I^RJ+6~B^R*g88Gd`p&w#GDP&&6z3^0{Q-DpM6c^Yirl6R&8l#y@km^W8{Rv3U zGhTd!`j^uG^Y4JXE#CEl<4^-0@tXbeOZk!ZRusqgCwe!fX|&y2Kc5_*mff9G^tMv} zoo9#B1R@IQaxLV@h(ZY+@6%*P->MD>l7R=8v#>O?l;!o}_{Z%y0=CQu;5P<}9}%)K z#GpaS4M8d$a2v)V$4g>v;nlD=*#`g(X={eLtX&X?QNX<5w@A_{oSW$zmuw5+%6%i!bcpPjn&ar%lz}>?AvmU0Jrx=RN?oEM<4G5vHy1wLOhe6`uGK4Tfjr83(6&?LBVJj!>h7ZBuDcdP#wcB9dDIRP_t z?C(Aojg<^;wJMO1&FUO=o|3utk(g8))#_y16_XUgWeNapo$Xz%8l%*vU|u> z>TugdbM2GaT*HCk(kmEy07KBoPNCCq26@~irR}%g`_E56@I#UoKR*qW0X33e8D9Cq z%3@$5knJR}A39k@0Q)uPkc({(7#o zx3T8T{4g8MKxmlEN=QXm`9Ba_1WPA}{ukzTQ&;W9OVHmy|CbWD1TXoo_=Zo3sY_pi z?C#wLj!NI%g40PSN~Yq2pu-N6_6@h)2*n|}CcO8-gv|iwi0uw`V{%=q(RshMuepuk z|M|K6zmZQ@AieCdqaDg&&r1bCf{Vq-G+c$aC6#Mq1iX3G%eez1hJlt=%C5Szy&vro zWtYCgeAGz4*}juU+q#MVt0b3PBRKILM8TtFu(t&uXG4C!PJ$HU{)~S6YMqtu+TUN4 zYk!+ys_?FYzoI?qf2yB`o$u$p#S4qvOaPS|vrSgn)Iaw&Fl24E;Vde1lhOABQlL-< zCxmmmq58b&|NN}qRESdGN0=hdAL@6JlbzgE8QEqx>)(#$Mi!faJ{i~%PcIR|u`Ss# zu`(8^llT>Q3~Zgxr>Q~ay7)A^0IYd6=atv*YTx94)|WwDdH0e&%nSL$avt$_Z!X0_H(@<&RI zI~vJT=usJQef66vSRS`-d%jyUnKo-}V|=!6^#7!jB4N?#9ciky9CdE`4xkd+u+}ms zE(*<_Ni@5$8JgrR4VvAqZXbY`Q!gr@WyN52w~kb`fvUak4vwD?qzDV8KZ}nDJ+g5e zKQTPo6_*aV+IY^Am<~aedo5-d)HH+j_3zPQ{IIX%cnr-J zK%j_3fm<+pmFuwXJNj}*4QuzA$7%Hg9oTd9U&z>Y|8xp$?EUiBn>B8~-8(e9>0Y8= zsTeQ1S~er)61)HtpicUKFGt|w-SSxNZ?xSL_6mQoh8Pg*v69`QgHE=iOfDNQ$E0d~ z2>v;4^+Z;FF`MlZ9`x)`5<6H>TCVc0`FvK+i3CZ^3JWek@a|_!z~O)X8s0Z&LU1KO zPS~3dPI z->$2{{+1W$(Sg=^UV;;?AyASB$^PT2(LTFY>XVZEP62-6LPII9`ZdUaUf z^O4A(=a-WgyD-?@?ih^t3U;h^Izv25TSqX>Ajosaw10(UPE0jP{YQrEVZmUtqd7U( zS!9o0|I@CtS=GSQzqHRWgIN>5!ZBC5jeBRhLuO&)FJK-%%s*4gJ~f1f)o@JG-kJ!< zhUAX-Iv2$p%Rg)L=zmRow_nbB36`)^k#c0)8Te`)^ac5<&uSp@u^N0Vdft*krwc*w zGgdeb@>#Xk5-Mmk!?N~ykK(NbQ<0>HbOqd@ixM;W6y&S)f6Z3Ze3%@?$)|5~=TYbX z71+y|eu*Qjdnc(FGLVzlK-`)Pms7WvjTc@{HvhD6r?yQu7BMmuw{|zI1eRM_*S^y= zZI7G!6JniIxma6$PCwzSm%)Tf--B;#TzkhE_9Sb{u2%g@covW$M)EwmM;s&TpLRen z+{#h8&QAyX#74)92`sbr?Q*VWqG7_-Gklb1fRstDX)1#c&&qQ(^<52GnGd0VBV=ac zG(x1mkZu`#ynmtnT0UsTh0xR#ixpu;xkiWvEq>$-+B5QwnS(rXO_-gNck zjQ(7{m3!Ca4+#hw!h;?@PTmT%yUA8K#j%dy9_T<;xQl=ULd5>t2homRxB&8|LXQ*s za}VEuW$AQATha)qjLzh9`=`0^HN@0^;|~yeo|pIGA`oeN6h>jhum}ChYUi12MoS-6a`9RI+)nc6B{$mVg+{#G_tQPh zweTJ`O-X#D&EUYS!ByOK;<$Y-TtIcmu2;P>NHr2kY+?~!_8<7Bx=r4)PsKJap%7<= z0gm!S@u&c0MKgh;wqn&`%YSt|xLzW*kdlm8^tCirU!N`Sm z>$@1P55fh(z5uHUj)BLZgc9&99>iy8X1EXIv@O0^`>A6buZAJoxB)Dqv?n_J7Yeu zlP<{aJP7bkbYJX)w$E1|@)Zn3tc-qU_?GCTk^S@MpP-=i>)v(|_x^?7%H)^{U^6BP zN;aD#LZ*ymc`Pif9diNB7r874!;Bc8wH5ux=F7UlSi77Jdl3-j9A80ig1&T+KLA=e z(tbM8EH+TN&EH>^SB3bh?z~s$p5@L!82;vuPWr^YAlcqzrS{rpeKG~hbfA4`DTW`y zIeC87Z7+UdxAPdGEm8weWhUQcM?IA95*9j$^)Yvu^ViWuDumB~SBia@B8SW9IOR{Q zvL2ghT&?Ahprh&Jx`*S3fh0HVI&ci8vgfGKliJzxxygIknh0Yep~mX+4A~sJ&C6LD zwdybRjeMcK`)O#PZ}PYKjc@htmHycGkj%&I&tLTSxo;jPU9xTA zNsy37gATQO!N7ssHgS(k7F+5_1>~!?$fAXY(2q#acNFjsogEzA`X}M_8_XwXTdZvz zCEP^hA)Rxg`meL!+eBG1ulY!KLz*%eYGAa+!O9a7&WjYB{G zW@mMv-PO15k;fA_lz;Jo{$3ttV@}N86aiIzD?h5o-d{O|C07tN$;i~YAXAD?Hn^Lh z27*;~C@PX}Ina7oz0o#{gP}<=2z&=U$~gYbaQ2{PWqKue$%R;oy&nZ})2v>kFImlU z`v(pxyMO#7ZXtfXgd?W)fJekGY;eRtoMZ^&_)nyo2~p? z+n;9WUTY+nraTr$)4S>>lJc#x8(KX*vI`-vYVBX_oQnU{%=2yBA1~OnwN#$^B7nJA zU)2dp5D>e?tdo?>zdxgK9Qz|0aWfGSHxn;H1rzaflQ^=eCC(}t!{0VKs(pcww7zbu{(SNIH+P%NNcEyjAR76QD;=^cdKr(@W z$e4{@KG}4wJ4;&{LvUbR=u`LH%`P+G%;_ z0qs%8MOn3b>nE>b3;uZIDwrhpEK~P%dI18GUX@cPDpM0m=E9= zS_J`2?z(JzixQ7=T}!!pk>^v;p_4adeDBY$8J{@F;JZA=B+$UoV&Kr%VQhzmKI_z^ z&*Gb735l+;{xZ%m(pwE*Bc7ay2k&PZ8|K3yoVpdwpON8s1h;PYu~gD$GL4zm0av%5nUspvnF7 zm>_!Mz(fAy=X?glQtm^KR+WEw%6|Krg#-nu0=;nuF!n)*4S zu%ZBOI#;YTAz7tSyWn9%|8sKScK*5b3-Z8Xo@}*PJ!H+Z-<&h6olVhywA~&;cV%9u zOD4i{V8<=DzZC8?h(aRR&rN|(*F{Iqd`^&aFc?#Dd?S0vK7Vi$M>_IG0dtJwR!g|J zC8z@J017fr1r!o}w-GW8TYYUTSvr>Nmk;-a?0Q&Q=)m(IreYMUZXOZSuYT-7Oq|Tb z65t2KA_nD+2e;lmzq3BXG zLDJu>^L9nZ{xRrW0t0{|A7#q>l>M+OaEYqJ_VKjxNn=r9d&rX!9A;Pn*^2t+oEU@2 zC=<_5DA+0|Vthzf;#T=ZSZ{2VQMEj_$lIPli2?7J;lx-OZ}RN(=%B-Ja{>ya2?v2^ zN$hBTSB#{Ku~Zbv2g5wMZEf=-$F$P>$nM$UDujr6vy}qtc5-i4jBj#gUABCb+sS{N zSVR4b{Xe%!{~|z_9>C&SzF~`ntheI3Q zTGc&~U}cdByz=X@lO;}hBD4|AcXMfF*BdvdmGxa@WKPAxSX10(Lp$|2fc6ktlgE?% z#%LE8?jXBJ#>@oP?TTaB(mDS|Uk_tE(4}fEV4ULi6xK>0NN>~VHjj2EEtkIGj@p=4 z)a!uIF0lQ~R(Z`Fc1!x&)pT1ltIlsh381VMu~0GHE0CqbaSYl{3*+F`02+~D zcGwBgf9tlx+Q6Up?y6;Ri9KwWhXBuNV^1=607AE`mZbdB30!Sm;Qp-pBJ<=8^F4@_ zj___wuq(NJO@MDv+2T&5oq0C| z8OSg%S(0F1gMM7BTSRL&v)luO6FyF-(*2YRf<~wk6=(~!;UW5;O%NbiMkWC{${m(C z**7rTJ~Oy=t1vC)BT7!nM9bMPJ6tJii&M7^x9R8MBmVZHUN<1VpJY)yvC%kuiWczS z>V7UC7nW&j_xOJw{@)CC6S%D8J$FgOPp{R;b^OHx+X!^kjHfNJI=Ps#)&O0ACQL^q zJ&JkGQxeHG* z;#&A_tp5t6bo9KnIb}$?qwyrX>R#2GDOBBYXNH-8syMb|Y!H<0$T!-jMaobuobj1@r`8)mT6q1=N2g_9UzR zb}7iN=GJVJ`a1+1`fq5bwU4pOj+@KWH1TRe^_3Kv@2sw_P|t&;3|OblkBn3VMkvk9~``5NANg$R`t>frk= zv#$Y)-gD*Dz0-e*&Og#tAx*w#hFI(SiN=XGz|@9L{pvv2?jvn8n`h1y1Uc^4=14TW zkx_F37hec_HT*Lj`Rm8iTaIjP@2~oSL-O<>^B9#72%;ANJTQ2iBV@oh?lwgUy2{%t zFqDj*;fR;`mp;`|-5HK@Aqz&ak%U2Sc9891B$GJkd~@Aoy8*XR*S!b8-}H2?pK}mj z()n~@JNS7&9L1S2KhQ9U?4+%k_!fLbJ(!KSEV_B=?cI4QBbG#x)%V`8WmW z!T)lt$kNh9R+|lbC(&L^#!$9W)2V6LX{Pjg7a-_9_)sUo>H8*J>N#+rNK_wYPr>atyy!!@n zS3WU=;)wtvcM)-lrt59UXU_@BAO=0UZ)Q7hRN98K_AC8|sbBq>V{a63i37pwH-P$f zFJ{D?fWFcEw+0_vB{%y30##|Iz~3&v?9`ls8_@Sr=2zMlnvvX`JVe5O47(IAS;*wC z1mc%lWi3-X=!F_>fUq`}F*y~H*LJ=P3mPZ3vKf!V^h)#-{Wk`(eL0#8vJfZ)pY=%Z zSWY8^VME)o;?bQ69gT&>5wo1KKD^vtLBwg@kFro1IMN;9_EkSl#IF0PIPrX-AA^3Bg)(8FznmQuXo~7 z0EITLA(C4Nv?G|RXCf+s4oIj;eh5dX$`0Wc;#O-qxG+RFR&7kgcP{TsXLzT2^)l<^ zFB8wHhZ#^%KJ&CkwYT*{ihWuG$MCU(6454;qPm=3X}Mc}cBVzxhaHfZz{+)atYn|A zyI_AWSbuxPH16&fWwKW;{6&G{0N7&AmrbX3em%Aa{R0mrfWOc2s}N(UwjVnUl|7x& zvWHj=fDdCfH2cpid{4J~wqJbnfhbFfm+U-0uMd@>1`uo`0}xA)7I;X^je&-=M+Y?? z%p>5_G6pXF1jo7F#N(vG7)W70bt(2m(D(Hr%0J6}}>yF4!z{sgMOze^bMOnk^X;wbISi4!_FP-0tSQQ=*T!Bqf42Tdra62cPyMZR4dKW> z2)@vZILKMh@-8PNE-%VI1&o2Y;ObCNFsbj*3dZ&O{chR5Z zMbS_V`Nj(2CB zyC&^G41x*{#Vr-P&OvhC%!YD@nz8D4=}`1K?wg_g)&R%p{VlVLdwvhBUwgahgN)-V z{tms~#^0;?mCl>asJqQfY|0YWwFRIEP|~*;wjOdvQL?u^fX*_~dC23(GvNfxEiM?g z0vBsDlX$I;o1`PDR8h(w9SltULI0EJk~z`8R2@Aw_5d|FCa+_Pkat_KBDpJ7%aQlK zp(~yM@Mi^dp=*>>y3CyHA>?-i*l)HolM*0$lqDD6b)|C*0%8YOw1z|f0{kBQL~NbG zuG{hQZtm@a??`rRKr}H~lx6wqG=0Vhfuot#aV=9K%ygTJ<5NLNn&+70(QHe7)=0H6jT8AMs>KTuIx3(f-EkFHlsT%L+7!^U8HmbHZ9E}~#^<6(YO(?VK8F+l7Gi6JA*u^{AtK8V@$Uo&E%5t1BX2j9A z9C1{ur$SCSvGujGDF?Ot?bF)nHT>^lF^?>I-bcb0yk(E+zRPxcvzf_5!xJt?FH-#= ztiBq^T}Z4`zC~M0AECGHNT6He6|QIn(LxVA1a%qnAhQCtB$21)+JnJ)pXT}&EM5F~ zF@py%XovSr6ck{paN1cBRH47QP6CPYzrEu0SsdQ2o}u0cy0eCB1@1ni0M$8N!srK4 zLzE3;?5)kPLo)Pva!ZgaM;8jVS(>3FII zc?@8#I$rWfb+Ze;Ai?6+P$e6d6K>8+ovC8G^%=%uF&yZ~^tu^NnH%M?wL^dU-m$+cCTstKBMHnRI>X5U$N4hh_v2I#Fy`j?xG z-8F|y8fUwyVe~5c%D$}w$TZgQ#x{V|k(UHAZ#vS)0lSUnwAH)|8R5=c4w26TTEm9X z#?#DB9#Nrn4rNTuE=olYT*wh@;z%REF%AH20hV8{ok)2eQjT5WnWkk6tYpME-4Qu- zH?&_f6I>PYKgH1v0g}uwgLml02)Lq-0Jke@9$QboRdTZ--Vvuso!qMWAN+>gi%Z*H zUcwy2p7FVF`RoU3)la|cgO2);Xzlj*EZfHBt@8Tv5ZW`d5YX)9-xNfHZV^cXku8?Z zF5QU?ki~bX50S;?wxkbxmJxIxC4?2hS}sYScw#HuL9!{IbYvKb`ZK)c>`#pAO?$3d71_Qd%fsYb zoR$+vb?5O9y$?C`XJ<~1L!o^2?+s)$rZQ)0yzSBMuCZe0k&a6OZ5<7Q@+FgA#~x2H zrkh7+rs(V+WQPFGCD!@h1fk}Y0izd0e?f;zPK^%I`Z27t=y;d4h>wAD9NwpMtT83M z=AT{wmX@gAoMfzWuO=WP#E10OuR1o-mX}?2t!EHxKlA?=Hs%z_h3r}sDNVDYT6nQS z;8R;^ZqyT}oWQP2w_P+-4?sK0ZrhTmIPe;EuH4IP{2-93XCa|y!SuE3j!VeQbMA5p z9`K3XkDLw$E&zS`R)yXBj^|2B4E+ahqPdZFDOrHbhS)=EJi;j);)r(ba14O-O;V)( zu`ph0sq3t}uYN*&*omSw>TVOiStUe^KR@f>nU|c*(>>ZVr^!nB3ZX^w=@PVh3t&Th zOYNj%b(?H+tyd2P(EBbjIApM)`b+sJ|1@{va=hL?jgj-c=zlVldaD5g619a^0MuGP zCCkuH>VIYddYdawSo-2-Jadbw1)zcxGe(m!w$052u%A@n(u9JVH^EHnKd!&6} zQ6FWatPVPvft9(`BPm{WvQZ^e^Yb$4wG~Hxtadx#JU#iS?7488N)$LwvP$CsGezp+ z5YY0^!o&eO=*M$DBy(mV`+s9Dur*i;99Gdv8SG|i%m{R&C^i^00`#Ml`T1y6943TT zBz7YlLNCX)wg2YY9FrLF7WiKHX5CYHlx}B1_1P;{{R{mg?Yx)R$ZS&u$f()GHM%q6 za2%cfqAD5V%C=qpqbnHT@SLivCHBp1OGbY7W~jLEMuS9 z<7BJ0(UY%6Z_bDG@r=+#|0(+}hZ(p#!~m>3<^&2ec(!xTF850|%bLWH;}cNd^iJfc zCT=t$O)chpZx#1GjwB!}^*$?yjWVHo@?B*s_KUlvidvhhSlTllIWhGs3X%{AXCns@ z2|}XvVLXZyh6HLJ%X7+Q9#GTk!*H_D3y*jR$;f+JL!gQR@ zG0Bc)PH)CC4BlE|N9GQL{?Q3P4&yHzNH2_|wZ4jxUox^0SLfmf8hXD8@QL>2{eClE zdB2GCeXQy<2yAg<8FX3gkPK8I9Phvifry!xuvA>{qy@vw?&=lUtN88FJGTbZ zktOiSt#tDOFdU0-eCJp~30v^E2aE`}HEa6tRgE<_tF@f(9FFJD_2!J)eLl5EKc~9Cm;R4>ZNt&%>t)P;t2asTxuZ@5 z$FCZVT({74(Q0X~h+?%jJu*do@`jO!+*A15x5DWRI%Tqsk&xYzBQz{dN_NM1B7K55 zIyn3-+8Ouylp%HFRnu{T?6PRcF@59>^5(k1%oS8XbNjqS?tUL z(#v(QO{<k{yJ3(7w_d+fNtt9&l?5FK zMb2r$HJ-pARCI^3i6ll;fMi2(3^BIoUCFC?o2f{ju>ubeO7VgaxNG9tHOZFaethMM z+g4yA2`~4fu>N4KT)=t{y*~>wbV;wRmA8G&z3!!-lZ$DF_Yk?FKO6VIxsE)(fUCcu z-yG_E%>^{8=o5D&BbRm+nI-wwoz2)ayH20oJV?t3n2BR*Q6G+U8DR^Z!t=3CaOT!C z?AJIyFLR)38qt>da3ficg?tbup1&e0aeotk!+f+`l;4(MHLPVLiRCL4T zxJL~vjiLk}F~?;MoZ>A`z8|mcVciC$Di}up>keg?PA`uQmgZt??K zO^ec@z(adO%P9Gw#e4=MBvm1ND{EBHIbL zpd_x74;gH;VervzGB0jTcyyL4UYH6ux`Ee@!MqHj^hoiKov))EzWA+b6!wb!#Ewll zEhpT$pnaG2;N`D$z_z839`^cTN|2Cu^XdPkzARD$`DvpKCmL79zWtWfa(5m9{}L0K za?+)4kViw5kqI+&g`_N65cQ`vL8eXfCa?*K0;$6y_-Riey5(!ay8c_#@0&C|uWZbxQoji8OGcwVd zVteW;P*hA*ps##d$nw*1)LmC&s~K6liD;~hzWcF?m$Q*?g#m*BeNsxP!Q@35dn7^mDmg{Kufp!CKjAleP-TW@2h% zRTt7Ye29>PN0)L?+!@}YSFP`1t zR1z$t(nU?79z$a?O?(&m^Mm?Z*|c7M5_Rl^__%Kzgm)id2U#6~`@G_yue1sA1&tB- zG?^5>MrqR(&{1AADdJ{V40w{havK$#H+|C7P|9Mn5*^SF-d*X#9zQP#h$UYr^5#aV zT4VQ==O+M;Zads+W5q%u;&K<>cpz_eY_gql(Y1&nk)Q~flbL$x|9I^Z>P#3C3#Mxk z)Mv{_s#bvI&EHPj!5xsORp_smD{kcidK3id0R5Kn7219&-{>YiKPXF#*S9{EuTglc zd!uo?$U9ym`Z&cPYL604B5N6|q5zX$oHmB9+Z&4^%i>eTGV zR$>NlqgiRW%dew@Ae0jv{r1e}6jf)xD>$ntJC7Cd;jo_{hi!cngc&|HD$8}@IJ-*fL* z^q;^pm?g(-1~YPv8Z&CChqOOy+Z=YPx82UuYPaZt&D`l~yQy^9M5Y$nYD0;Lf#08tDR$@ zU(rMqb|TF*17v-!LqsYA6a=g}^Hjp_PQ?#Y>ERM3(xbZhd{=&U&Id)j^q*#+W0_6= z|6KbsAYw#M!t_zN4o)J*y{QdG=uTN1D%3^ z7Behtva&UgGKyi=1l@osn&~TtVtKqNicjCIoey?TmdoWiklwsS_8eoG=hcVBuJJ2q z5gH}Sd3JKoZa;JPyM9E6EHEJXjXb%v;KCEM0pF~-n?hw1XrGQy%t^uf{ReiW#zjs~ zAnj)4_cA}rYP@U0Nx#hwefaR4^Pca=wyt^-lLs33npE2zoNo{O1;L5oc$4~z)C-Yo z?*ToJFBV<;-rzY%aW=**4(m{c9&&kH5l2hRFvTqp;+gnNR;5g)7gf#)o28Kb2`S)T1wy`Kl>#!M^>v0Gb;BI@h-JS)He*6H{;g$~KD)78!|) zu*$d_<1s5ezXhz^OexW6~-0e;hOMrvD;m zA?4hDWwIc-UW3u;9bNU9;(;22; zvLkjn^`AOe{HbC>V45G`bG>G+jak`zG8&NQoU}E%+F*vvLllAWyd^)7%j-nem)ilEY0%-;@ z7!_RGo?WZ2ZCvT*LRJ8mwOiYTiDA4BHhAwevD%G2&MlH~UJq zL3<0J57{>STXxlt{hhe1vJTv|TUClfQg`V^Ayn-B`e{Zslvb!><34dS}#yv;I?mEfvl(vVyYxcobMn|BJy_ z62pSKkgMP5&xQ^8GhH5|^15)D$`)Ry<=+WwP7?v}aacgpcC_&;4Y`@a4T-3IR$ zI-OxZmy3+~s2`(k(T?u_%`^yhA*!v>)!E$gmuNN%m(;gHwh=%rTEQ8GQ*l z&LkFjb_q0c-ev&ROqt~gj~e&7>1`U}a>`|R9>FDV>D)jA>J2RAIBOH|!B!rtdgfd0 zA653>0kO?!d@fH7ngVvaZi06+&1ER!svw~8l~A+%5FlZZFAC=e-tP3J-E=&;VsqT0 zZytJf?#DBU7u=_9#&+&NRJPNZ=}mr9(2}kE#wrN@7-9muM!2)vjlL@L>RW`)5*DSN z=79WQmmjC`fFD)O?f6Vt&=3PkPemVAL6odR45uLDpd9ZaS)sr3d%V1jTVze9AN&MiPd7iO=3(b{X4iqDJY+z<1-^dJFp^t6hL@32th;X=!sOs$DqH-7X7*McnP z79fs{5Q{ZU}?8oR21LKX8D)blrMOJ-~ziEHPh(sMCZFcfl9}&o%`8FWcjuW zdZi!x{fXzcE=0VA(t?7~v(7DmZ1WLTyB>u@+!(Bcw14F3_m{f&r_OI44-}a$G3Vod zz%Evb(q7B1SE49)^&$@0-&#$25ZMupJc6t9m(Jn&_Am){qLKhkJXv^b*MHcBnxj?z z_3waOgW zkXt(W>zq*0|8hWt>VBByr+dkiQC5!XVI@naq!#OtepmyT`8ht&p7c(&3#A@9cN#B) z+imtksrs(3jSq=R+qho&6IKrQT#+)89wWe+bTiT7V<5bKegGhRSE`^4h`bkb5psm0 zT$e)!*U_m;R#hPDC0IUZ672jr5gRwYeshBHE5FNpOC&@3vpNfui;s&(ze! zkY6%7Xvc-Vexgwo8l)2!pP1#JbcgsO?8@Wq%78Jfj<||EyU9CYf|$nA{w+IQUcuW) z06>;)DYlY^fcdPFQ@>L&s|2lBvhZQl;QPX?z5#ODl}wQ3m$U5iVh8<)qC>xHJ`6hd z%-hbUvpb~+d0+!;Nu&kOMX^sLh|zU6pUS?fPgQ(sF#sttWeMZEO{YuCw|%@_=C(@*KUhYBI$Q>)_+_ z%}BD+rvM}3RqoD{|3Z$;O5LURFSm*J%tFnSP^<@_;2GV_s#mE?GEkm4{nD zCYb!Y${~SJ0TWcF?9#EBD2vN4BU>Ho6CS*7hU&1TLZq_`^08ZgeV@lWOl*{n?6>Pb z)i=+adp~;PmPcExgr@se@?{BXw;y_}RdzUdzXSBMQ zPo-5eVmFslv^0PkbjX+4*JBV6&|dLAIs>OgNOYRF#M{SVcF9EEDJ9FT8(UesCP5Z`M3O9B8_=?aC*pSc@8N zeFx?FES6A(x;dB-(O=cQrF1BRB_v9t*o0FPBVA{Uvn2GHi)g~0K|<(`4sO9YoW#%< z;f$~iM%dwge^N;zZJ*&AN(=!}Iv9*nw1J8pGRUMh#lhXLU?L7&#|U(9GNUxyzPZ|R zcH<$uD&2Yi^tpF&)`e4dt1W@-5PA#%xIxdU8 zg98VXtg9IDiy!#Fxy$i_%+iTihbsRrUlCUj(d0&wSSJJUW`lcwD2GR{poVe=fEP4+ zo16)iR(RA+(Y;$n`gU&{PdaqnUGYO-lZNVtaij~!Xu?YB1VN&JV-QQ*>QY}=IkR!B1rg}ASBm+uEN@g6s_6NrkA09^} z0etRF4*emLq5v8mo6hi2z!e9KpfC?$0ZZ?@ms(?8Ujglx=z)LfI7!*zr<* zx4-cplmj~@j&=7$bOb!4=ShqFmE=_z3i>`V^?m69gO9jT+bD5!|Hm$$Th%2 z(|Lp@PDageB)5(W=b%&nZP$Nyi*1HmG>+ZOq5nJ|Ffe60iVRlJ{}7SfrT4xzbp*@y zD=zQ%icv~3uW2+d4yL`2eR9$u**E6{{dW%u0juK`yE){8!G5!W+> z4};QRe*BbiYeph+j)FS&Y!9YfxH02g*h-yDU>n{fEu9Rax*rTX4V>B0X!@wzWY}9! zxd#U)nG?C(7A3|O{7I+85Py47Kh|Kkdt3eSI{EH(qh7mch+dw#jZXeCgwO?*KL!oa z_})>QvgrH_UtFodDnS-5$l!92GB@(TV@}4(^o4QR(CyIG^O~PZoceJCJH9#H?=L#sA8)b-{Y5R@ znmRsA-A0+RD!SMF$BnOH50q}1&%zET06Rd$zZ*1l@?6IfyZ){^9lYbK04sQT+npxyfB1Kq{{H+v~G#U?VDwdiH=?G5I+EM*%|z|QBl z$H}p;M|XZG&xi<~8&Shyw0iRYeYT&@$bzdbP5oz3<#WQQ|9DfUVAyRYrf|{`oApcg zye0)sRIw~>w%zrg8pIf+oi7N1U+TvNxZLU=FW)9-DaLSGf5mqStbYoKJ^;6SdF(U` zaO{rmLU^6mR`9Z%LpOXuVDc!&Z$+zE8wgNjdkG8*>;PsAmV6j-*=Bb*ua+IC4C~TP zCZg%#R;d8B$mDPGjkSr4(BWjnv2}j({~?HBFfi3|orw+%*|39Rb!OOdct@AOc_}z| zxK9H)jQdR|ayWJjiZ61W>)Lc-TR^RQ;?d5|>2@9O+<;-6IRS!RZAbNkBR*3JFpm~I zCoyHV^O{ErA(JtV`2``6>R!;ma>zVoC4!I{;5tSq?6YZz4wA=+*uJvxd00^fk#Y6A z{x?08E?hIUYy55O9H$l2QFcT6H@c9hbM_}NR#Q4lvbn`BBLhq{eNe|XsGa)d``;*U zZ0x=&`h~zvtZ`!m{cpV7y6EH2o#JJ?OoCJqvGk#m&EfH{*k z5^$INMo1zG*^nWFS1Y;{gNl=sKK)d>;I$I7^teQi?*F@@+v2nTB}+&Wk)&sHEW zeTyWtXii!)OZA5Ccm22IMJChXyGq)cbi_gAZ`ZbaXE$5;Mq}5%lps;X@=cB7OOX41 zfx2&uZL%BjsxxP=2ikpCv-!v|UvZf5&_htBKSE2IrM4-HUVQ=2q|GG@PTF2Fvha&9 znh}PehwdR{+Kh%fWPYOND}+mKO_#i7?hwZ7yc%d9;Omq<`WvN8&}-iWFv|B9tk{jd z!4i>%z7j3j`=!B}M7gyc4!!^;%mA>T-@hBasxX5ZP~MezkQ8yEo@!;(wBs zwyUjf=y*h(G%S3Y$u&>&XE}DBkGJ(+v%E4_4rTY!TY{JuMCFH)vhRESPx5qwV~B%Bu>G))E(wx2fJEa2)wrv^jnSe_ca(4+A=^lJwiB8 zOxJ&Fi{Nw~rWR%`3lm!Tr4g~u@IOfdi}ExzxWcl{%$+oc!DpB;d!H!xbbXe%X-VWr z*Xpq8z)8O#i+9TF6YP8QOQW9R#qT&TgrKw)C%QWIzo75_lk==S0^5|~oq_&ZBcrdu znnQ$Fo!^X=+R-I5;};-cR8+zh+)F~#4Du9K`eC6K1iKhas1<(FNeCHVq+b%7vAs#9 ze}b8uV(LFwf`5(FIh*r~KTP^jv~BG?mE5%eB$^V+0A$gt7k^#sH^Du&6KiFMdMbEF z1-7@#kG!9hSR?jRu;N?4vCmKRtODA*`<-{k;&@ti{#coGESb*KPXHdD$1fi7lp|ST z0=$>3$2Ef)WXsAXdzk~N8x>r%`H}ztS?ZwTs4$8TWcHvx3lez#C4C^DlL?;pw>StF zffV$4Sra-r)^?YLokv#+7|i!`&f*{kH*j*3*I5pk30Z74jC5Su?+4mvy|QvpB~+VJ z`9yn`9%g$=P_X(#U)XrCIpV!DXj#hDvWFp$Ijh~u_xzi~n?xlbEIWD~G*v|8npeIh_ z8vOQQ$*oW!wbKRA&)8c|r@_aF>@DFNb{c}uXFVin$WB^-PC^7S>*&>QaF;w?P+%PG z$T0cVxmw4rg5WQMcJxnHP{JvxA5SUNABnwg{VX!b8y_0>9@jClHer`%oGC7lDe{(_i%=~O4UILz-j((<9 z00HBCt%OXQD+SDWulNRfR2_5+U^vAZTL8Q4f9{g7s4N2V$yS=rR0WI}2cfdnXKNfa zl z1q6NSBkWTrXQjI;lhk?ZE2Ka(RS7D#HkGom8|}5aD}$5SD(S<<78{OE1UD6)vL!hr z`q;>@$_fSTLD;v9AbBtZ zacdXJh39rQlT0pSQC;#~V`LF&WjXK#ckF_F`$^=6WX}Iqx#0!=MZ^U`9e$WCHCmc4WGgZ!`7>rf{r@wN^$8 zM~B_i@T#vQJ}$6F{m!!<+Od> zy;ot479{JPAzNnlYRm6(MgxgI%{D7j)MdZWjzzEL+%R8_*QOTlC(#W+Wauzp2YnHuG7Q6b;|~@{9hLX>=JYy}9z+9zs6}K@$K0*rh|e zW4Y2fT}oT&$L_q|1ocSTx&cSoTR`I{8n*MSK@<3-B1F9M^!C}za9$k@0ky=+!l*G7 zyZHQZE1SR|#_Hj?mA&$wZBfqxz!g-eptzMydmBN3uh7YS_{Qo|c`C!O$7Zyim<592 zI02e!M!j|bK_20vI0t_@K6u)Jy7bSjp`=?M(h%!@335+u<5IS3Qqu8ue(asEzb%iR zL7jZ4?)_V6?=`)DeB6HCAvCBerDi<7v4V}on+6;=zt;@q+>OieAy~+7o$G+b@#s=M zi}B|Jzsud#@6?(hNKutxw%HPopig}Bj+s@4H-M55jXy!N$x)RUlj*LBqIL9Z)yizy zLS#J(deo^Lm05k=^#Ylx%c?(im}fi5ur91^@8iWzp6Jha?PH9BgKLbqkdP(-t=Q3Y zI|l{d>ihj#Hb#XvB0l@ccaqO)N8e3w0Sn+&@U-hTF$4NW(ZDA`m7^^MqwO{e*Yzxj z1@kCNjunVWzA>OEwHp|ygTcUmFldt98{la$kh~!Qm46~tI$tAYA7iZeQjVEaptF9M z(OYIYQeP}!s}8H#X7ePIE8!9A=auJ+&3w;_iQ;+uGG#r>DxD@YVgI zmE@F~gEAr)GF2Yp{!8^eeodm}Jf6uN>o& zojhPa+T+C~k8inXB7C4lJpmJ;$!6@-sQy2#6q$t%3_BsXtMi!64bawL-|u=z5L%H(p5*f!1AO$bT~X%| z$&BgoGTHK@uXJ@t5`-=5Sa!s5A}gofX#kp~gTq?maI?xZ0Jvs`msy1b9@fI4xsIP? zTlVY=1t$ zimhVEBmR*j*0IPIVgZatI25k zFFY9$+e4{9rcr+$UyNCZr7LdfB>NJknzqfDx*)4zc1(uOvWQn1*ePWCVgxVR#x&V$ zG)7z9tFF$#>8+j>k1^=qcyIU(;}0>WUtZBac$!D?|C!i9Ah!A{fE0Zeu%lf{wMOyB z7o>-t$N_`!=F7w%7%hG<;G}!@Idj3kE*wcui@Psh(yY#D>=H~I~0DEMS7umQ;-uKcv`cI(tmk1ML1l3sIRZ2aVTH& zD_=Wk%UP^!y_ZLb?n+Z-YyX`lS|2!kD8$%B@xDC(~w##_KPP#h-6|$RAit)#YBfr{@ZT^9t=iWU74=2E1<0kxjhvT!1FW z`Ivwmz1T%g?Q|9JnL%{SzVh`|Cy(W^-=8ww4KjK9M7zxvSO4HZ-5PDJpkBM_O>}t< z0_6H^3lPL$DKe9}w8$06Xxkp-qHW3)dD1!|8Q36?;t-sTj?)gnBO~wnuNmnjUpP8Y zPRj6pNGx|RvutJBTzNIgXbUUe9a+gCdzfxkhh%Ysy;)^H)(_#!StbMSv-*iJ z?NFQtX?ovVvzu<;b;J^6^c+j;W9Z(b?Y7TZ9jBAIP67;ugL(qs5v6xgqKmm*iayP_oDti^7)H}roDx%xEg(x>V|ceUG=RZcgM=!7PVq# z$u734W!g*U=3LE6#U+J#v?zYc?pv4J)LrN*@dqYKk4?6qWBC;6Z_|GhnudX9o9!78 zRvd~lhqH=(n;5pgTw!9w1+c~FYqs&;@zq&veIFG2J0Nvaj-2wBsnlChbk)TzRKl=wjZ)<%w8pqeK7@d8O%ORn;VRM$y3Pg1V1lk=m{Xhwq*b4 z3AAmL*@y5>lkt=z+q~A@7}&4jYZfcT)1_AsY{xjLb5H%B3gYeYQ7K=p&Dl09c?}Tj z?Krvy{cph+Y(f|O_3P>BAH_~Rrw^=-B9 z$Dd%YGviyw7KOp$6F@rZ$1lf3r1ClZehAoQV&ONR*AN|6BOW-+ zyXvXcR_XAb_;CJd3thge%U6sf%>l?4Z^hA+v$FB^FSOmfL^n_Nd|uIwChNiXoebqp zWB)XLQ`7ka?>E}T+QEx+qpFV~`KJ>2&38GCH1x=vM`M+%#P-}}4?_X~!HBRKrEEy9 zrd(x$2tt&v*l}A*T6i>S_7dxu9v_ouqpXfuEuE7uFiD=~>4KQ^nB}JJxs;LR>Q_r{ zUBu`ZfJ}!|wEGn&WtRF!v6-tH19060cmxtB+DAeCz~kxju8@+Ac0XCk3T`g6QRc_; z01ekNM4+Ktb)zo;3?7jR5!Kv1ksXr8f++mbrGWPdJd~uYi!diMl?6+u0%f-Lb&oj~ zs%VX*#tet?03Sf26kg5xw0X=l%x<{ZWwNXV8-J6b zxs`K0h9S3^EgiD<{Z)1V$2>M0djOiv8R+|iF0+p?+cfV3!<)?*1(YL%So$a4p&W6W}B^bLp`f@9-~TM^Mg(Q_KHt8hPuHPYN3kbjrNo`f+z_x zHkpU+jB&;I*ZW9#IsoM93NwqBIeW1#zWI{ac9Iuxu?mD^>;@W4qKo~sw$mp`q^0Sp z6pYE~GnLDf$L8ng|78fQ4xQr(6=Oyv?EB0rT$wcs+|bZGWWLQac}y+ z$o_K1>I3i9=AL=80X;GZng{GdlHCP5oS>q&b!N4I1X)^Og zFu&*@WcDwNFKC}?$3fp_ki&BMJZazijRMu;qT7(X^VoH56hc~6t&KRD8bZLIYwEh7 zcnZYow_|cX38uhT%Buztg(P6y`&RQ3#wAn%0A!ZguI$Rm0l3O@>zw?<4XlJ>+JTN4gR?+Uw}|eLx`+|lz>$4 zuS;UGRh1Pd&L2n%N*C>D&3S(LK}kNrzBy$RvQ$Sv^i(e$jvF8#wn+1Hn0zjESr8jak0Hww0H%!_kVg zvtiH|x1W_TK6p)xK#t5RHsoK|9@hI|&pBsNvg*^4bHTmKsve)O&mLtgR*&L`Ju#u` zBWU(#K%yVu%#Nz_3&1*E^S((+h)KpObicUNZSHYc~q@dv#;>y0`OwZ&u0cJ-2U?ZBf{DMKOrH!`8@5ELu6 zWA{NWy#kMT(_027#v!zM38Kod=wt$X{eabA8iPT-M1WsnE zbB<}$Us~rk>?WIS)WqAyg(~Gkri&F^+$y;on`a^6_Ht?FBOSmz+DgEtogiv&=4-S7cy5V#M1p@bIjDLMvP z*UV<7ywS#=Iftx-nA^M?a@KuhUd=>SyYC4Ngw_zsztEZmYg7MIMeTN#U#gS65+n%^ zk*S4cUDcmOWsB|gavuM&+s^Z6J6wM0B$Ky3Z{=#mNd-D5{wNpxMCnW2cFLREhj|)w z&Yop{78g)FOY@DRh{C*io~e>Mn;gRb2Y-|gvMf`K=XX;^Ebj>bxAxppCV5PcM3yM8 zDgaa%&K!9lmeTtxi6#jn@)(*AV_WHR^s#W_qw7Bv)Ii{6D>RvmHF8OsH$mmMV4VVv zHDR*6lEt}QH^Y3&8f|on$&Ykj%To$^#jrOXZ?v0Z8e^DqbyK|Sy_<9XV<>-I1)fXf zI3lD5CnY;CF@V)}T$#06oH+!gfc%p!1Au|?Ce9@ITis2kpEu#fprG_@;2^iT)mPw9 zaT#xa~wv%&F;U6rlGItp#-oc%O)V#u=nM{wn%EUq=rG)@7@t<_D& z+?z!>_w}M1vyc96tT}@Waj0qody`JarM^I~YpK<(>=LMlaEWkVO#z%m`#u zo@eGb;3UH2pgGR?TKy)-E~ITsT-0R-MRMuz`* z(L3p4yO_F1C=f9g-H!7$X?JZCiPI&tnx`IYxN~Q3@|O~iB!wSn;CKp2Sz6_&-`!b0 zqV&>AzcB9F+o%Aa+(%eG|KSXrO|s3aNC(>We<@k{n^ojBMhNTk0qOuYG;lBpt})Bj zGRHZ5uKrUEuf0Hr27qhIu@Ml?#I&w72s~r*_TeR3P+9^4Gli|H= z+OJOITROeGxL5PG?TTYZKq^H8=XK=I9P*X)Tk_+XkNmbbC-9F-{PLtlN?emgzGiSx z(Igzcau8bBWzd` zud-P|Q9ui%ourpy=~j9l;M(F8g@0o3#Q z6nyCWyWDks@}YZgGI#5<3M(tq^gH4RfZ_}KQ=&6Pin*_vJ{rbsZ^wc*cb7SbQLG^K zKrizDo|$#%Gc#NfDXO~Th}f3FsTkPmWo1(v=+FmQ>5ib~-nk6XT-ZjibFdfX0}FJQ zzOI+$40E@q4#E4}wWT-&=8Go z_8hy47&QZE;8o77b@+0*(zemgE3PG2*l>RqFnDbdYtoHfEElW8Y>fNulaxYk6uOH_dlB~JO5+)(057_$FqY8t^ z6Gl7vmC?MHL2iimM>m=%Kpu%`jdX+naN`_IWM$z91Rk{0;BB0Fzjf z^w;*USDalWA+R6;Q{<6FzrT^Y0TiYJ3wg{bO@VuX2Yz!FGYp~8vz_Kd<96SdV!$ z0g}~Co&?Z;E34mL(=o*1{$jGRWtK!gPv0wcifdtlIx>Qc0#({im}^u?IxF2rg_$@@o+e%n{vs*7c{CAZ;%l2Z-C zH4iZ|a`3^`?_%7RZ7)Cd1Kkne>D893K&Q8d%?l8Cg2Z%QQL~n;7bX$F{sN-I?BK2Y z1q};zsJ`!Z9EpX{1#iDMpEdl)AccBc*{IuPc=-ETyNvCW4{5rew100b&F^}W=n`lT;ds&YdncN8Gr_T zhcl^+c4t-jlCy6=j2?C|IWsbCkQe2Jy#eLKhuzDJO{|;ofHU_Xe=u^dkjWjJ(-Vt^I|LztH|zk|g@Wt?M16)Qtgx zx<|_Nh2KNR&k|}NANp-KPQ8itwb=?}NS)i-QAz-LA-<0l--pDJl02Erhq)euGFu({|@zQlUTgcs%ZU(P* z>Z1RB*L;l)J0M)snaD8P)(&Mc%4YrDGzHg5@e2H0^W%0Nl+sp1z!Ms{E^_>KUHd!* zD~F)t#HW^>btc+4w7$?^l9S;1JS1@ui9H-(#E5N{ScQq~TIGU+l**iCzj5r(1qU^p zhld5z-?@y|vitf$=LV*t`Mt8Y5YAMjm4pJma#f4~cXPu3+*m(a9hKao`j@u44gKeI ztjZODNOoZgA3B`Zi_&frut=Q+IP9({exo}S*iIRR*5o6%tzL}9oBX_~V!Y8-MV`ti z+T%_!rhRZ%D_=$^>X^5M{MYHkBQRc>E@u9#_I)^1wx$4;K}(~T9kg2K8*^j0s#n zr2WX*_U;`QPn-UypUYY4V)G(nZ?XmP@AZ(O>~=DW559gYxAC!{86mT`pxy3c;xU}9 zK^%SRozD55PyN{HA)scA7#U4=;!3aR=<)91mujWlTtjSCj`B^R1`Y(24FdmWIRd9T zvcH1tA7x)mXP{zysa~MJW%D~E1CxAJZBPsxv^V8-xsjT%ukk-GTC2di_cmK%f z8inFBmJrS@%~ue^Z_W(b468f2{yPQGW`b ziQ(CoNRCgzAWiCB!7B5aXs9Z|@if61iVbbf2O6LLk!4uXaoS7>cty>e6F|tYkRJu~ z!U|^GwcxhL{xy;|B0k^-^4}Ap( z%yJBn!geD7z5ye@vffP7GMi|CG-5O0civ}(ZC(!!)UoKWeFBsSH;jwts=t}-?Np;< zCtCmr&l^3XT3N*Gja5}r4I1$PjV9W}~P2?A|uh&+VVUxFpJa|Q&;LxLCXI=VJ6 z>}({HDZA~si`!<+QpP*<8pb7f)XKa}4~Q~&DW3)_AG^(K>$Mc}=f{@QF!t*|J^O6q zxj|u`HmcOjk1|$O?^m0JDDX+Tc2|e*C9nEA>F<`5ehbb|K^HB|7l4ilCji( z#QT+-1&OBrlK4({_>?c1O7jUI&&F22uR>5!Y!k9WG`goTO@m&K0$3+QY%larv_XIV zzRqkwpE5usQWfZ6g^&mVfLLI3RiHE%gVopN5ILSNXsd2Hr<6UtkZPe^?6BllKcc4=G*J4Sy-Km#6?Ul_0h@~edQpl zvK3o3j^?xX0YVzdtz*$aUJa5R~%dH8HkMNJdcyOK0JkOKFyj%18sp}{M z95hCzl|cxPMd>os7=y;Duef^ye_vGY5^}NIa=f|Rx=4p>yW4WV8Q`sitDL#N()d;1 zoTsu5u?H!?=(nyo|C|53XjWiirs@Vr z(2cKoPCh8b!y{B6a&P76Nlg`7zb z9*y+jm@D7$e12yZ(ABJ$*v?Q0185U4msq}w{Lo7Y4NmuqM#NiRAK2gx?-4KknmE}x z82eWT9|EnEci!E!2pCMML%zx~<(Y584z-!n-pg|Z0QU}Gh-_-gmdOMRc^c#qd_6zE ze7jTN3jPw=c~hI=HITPrmX!o(LrmtY2h`ZrotR5psg8=Wy_0tY_9a_XBlxb02P)cWbwZE!9$H#5_0 zT!Lw@snl07k3Cl$!N|crHRX>LrpVXPq>&JfNl+701p5#^JY|3QpRWUcGTXUHz2xeR z(KxT@6j9f$PN0?@L%X5NOXMA%Qo@sHT&N{c~0taSb@!YU0fgpqcFS+z~l#yQx zD2)z0kBj6CS&03IK@slz95ruO?js|4v+11gTZ!d+{Z|jPK(?B3+t8S=AMeFP?|K=NkWAkL=%RO!6CbUe?RI=UJ&RVo;Gq%NC2 zCr}>Jn+Y81>2x@=E$fD3TP8m=jk&x)#Eyu7x8{3|!HQf;im~NyW$YrWcF~WBnU#Hc zNjSuYHd8A|yv2UEaPEAsLbantiOJ)1*c}fhs8}!MCr=-UNJpNet)-H`%>+ObL9kZr zW_-`7^S&-3YbBF0Pfp2zZw5@TYlZ;BssFV*{__SuKD#w8@{CL+x-Paf^Db*V5;zAV5^F8ATF8L8;1S)|u3TniLWQv&A5sngGFMt;*=?pf8_C^YKc+Faf zQz>Nv(gSZ+4$^JEjzf;2oQc?WN89W-`XL5=3ZTu(v2R*@Ty`Ko;^@YX*Vldp9L9yl zm&ioy__JfjJ|U)(p9BBH5qJR)5+b=r&gU!=ZDbm2`mArGL_EX&rs;lOgPk0iAroXr;z(Lna-Q*k?OgTWC2=jHgpoUs zE%aodZGvaEv%O7R>xL+#F6L$Z51lM7$RO7OQcj7n55Szyd=ElaXE?eZ?)=EE+-wPb zpYY#~b-7qV4rRPp!&QLH#78sRYR2>DmYBO8<#Wd~9t)RE@qV(lXaRv_$C`v1Vyj1< z$TWXDd|z@EqPmF#Q;ipiarV6=1!!TOtw*!Jm<@FtX$Qv3|O#Y zHOFg-53i9%PGt7Gx09EhmAyWyE(IqzF4zsees_J_<03Yn?Fydf0-vRSCfUw$DHa{! z>bo~}61MVR$~x&nclaMf;oOi40C7zYSqaUc)OX&;4~T@gNVZ^Jx z1MC6sgbC%4qgU>A@?|ug6Wn;STTw`L%&dc>UG;5~Y;~XW_*E65{X^&9L4UYu61ThMwZ4b#Y(+(vpGJK>T(e>k}xF6}i^^b2Q3HcxQl?Hx% z%NS>o4lA1(Ytvm&cH@nP&WNFcbU1t->q8&deZ$(*u~aGN4!%7dP6?uHT@Q<+&oMps z#tRW#SRHcg?E$=$edp}T^{)SE!N=B-ZcF?*!@$`tF$N2Y^oQwsq?q%(Rj))?an-& zg+eA{#DKb7C;ugP1>7R)e0!4j;E^i?BKfZ}sqvj!5;(Sneo|%!Cag2#e?Q z*UrJH@Tqe!sm-Bi7RP#fpOU++)oQa>{Yxyi5&EkyJm}KCMZ$4LrRD$iGk-LyfRUq1 z=jqJh9=>@bHR+6w(t4M2jOQ&F2xovT#<@NNHnf2En0f33r2I(YDvaQ0mn(r`=$Qf9 z3CJaV#88`tWhgVQ_#yJxEvrQSnFHq^*)*)US0XRqR|Chkpv2IhfdQY|Utc=65`dgU zqiNK9{V+Sf1@b2$Ye9zAKRCWqAKUAqaQUT0&7h09+&V5hl!G(tRklG>b;Yb4kJqdg z%Nsq{yJ7vk%e;oI_KPt{ARj!g*XH;X znFUuP`#tP{du;5~Mo*w-p}}hxW}M zUgbJUf5Wyk;>EAHEutULReBo+5;e)bG_VAsCUOjU8a-L`oji+tX@~PIau%VHD~_6n z7iu#XSwtfwtoA<2Iah$mKtELjddW&&O-+I`s{fdfXq_O5JFkLsZSJ^h5mrbA%vk%$Qz$u4% zo(Y!K$3*}c@&684CBTk}d_WGZv})M%pf2TfQ->nqmDrzXbezvUWe;Y`Af76`Dp3p?oqUfSbOg25lFL_#i^6O*@K>BYIs0$7>ENyv5) z=+xf5+pTSXb8s-z-57G0?+d?rU3lw2L+Vcbf3AE{2BTfK{WUErYWdA6;7sv zRDw<1Q;mbas3emts)FTh??mY!1d-S=aN6j3-HHBN3|a=U*0Qal!of+E6>8+L14lFL zp}_+KQjufRdd#sxuAYA)-`QnAI>$qR2C5=+M)BbM?espeoG#74L;e-WUeEeZ+nu{b zv;G(8YNO>Oaxzz!*h*}EpXCv@*!5D;@p-9iTjEgVrUy;e1bF#;4>a;07HliK)@nS^Sc4b9?@Gg(}dmogrG4Lo1uQaTkWW@R5%HF(Ijzl1(7;7$;lB5Z`rUx0Q9 zgjfye#@KJJ!wJUJ7UgcrSNi(Bt?owI!|Y)E&DwV9T<-&g#9hgrdp|x^P4#+fY0A1f>m`ix>8&}f_V^k{yV3bjBiL?u0~KaXZbc^`*X@(d^Z`QG zWq#`Uc>V)Js*KJA@P@Q`Wrdwl@N+ASZzU|Oqw|tChwQJTw+QGz(`6wBAj#N8s;68Bhlk33x?Qk@L1Dglt`Fta+Juq4-U^AJ39jwDmR`45=_^2KpmsyU4%bij zeAo7pwA-~)`t=!WBfHG&q0hx13=}~ z%K{jnYi8O@-R-l&BqruY=H(QG#zJFH*Nl3<#Xie-d)EbR$1Gv;9-BH!`*d$7-6?d< zhirN4fMV){_L?svd7iJM14t0B?Yzj=PI}t(^d0m&JunK97rgbYWXdUi4$zUwt^t^S z5=ga!(#&An5$`*Xvw)`X7JBnKVzo?PWboe23vnMFDP?Mu(I>&8@7eF)D(XqxQkloSV8{jy~ z*}4|7HSkBhmc@dTCK&X(pOp?s?4Z8$_$zDjD_hYx7(xP0n8DAr^a20{Xdvg0!_i%| z(jz=1tI*_eA_b1ktiD1KM6Td;9N?!O0LdpSB$+^e6y3Q*jk)wcQ!W+osQzR4)+5Dy zc)hClqQ}p$9r|yYxgM%zm5k7KnI5-onPr<-bF@5r5H(KK-C2njjo29CNPfb^IlkE2 zH|cBI9?x-6ia*%jfx^%FQPV6(ZJrC>YfZmTdNcV0OWPO;0$|i6jnA(`SY7Pl#tLON z$R&Fopa+v}Y64vKBkj5845pnKRTS_Wxr>aua|)0w5X&??33&aE0&v!kqdYF)X^;sh zpFTkNPN`$NqGnH zAT}KaU|3q5rdQ4;L&TKv(BQdpul84`&1^yM&ByeoP)M!d4mE z$R+YV$RBd zLUba5lXR@U;WP*zsLFUuxXpC(0d6IU7M*I@k!b!AcfGtsnQ}QsvM|Pwfok9@>(C9$ z;EtTgk`5naO>XC5%)RfW?-Myl?H@eZx%9zAv!PYVkG^cz_qgUe;XL}jPkkc%Q3%Zz zlzkBV&)10um?Wi76aSwlG%8tCYG1)J>}h^@CS|arUCChF|G6+;ORYM`vE<1;I1YhJ zPCwT5MAzKQG&1?-Be-`LTfsm$cYDSTo)c8%ZhOOj263qb8hnRkVoz#b1ThvJ+U|g? z%?1bES-8DLvhy{6t1C1Sna@V{Q>E-T%dlUoU9Qjkb5G@CWqRQ|guhMJ(d#G&&ztl9 zmqS^jZ9Py~YXyVPR|JoDSeIv`(2}>|B=RD_4~5*?tfV!fy*D3k@u}cEvute7zzPl^ znn^FnS3oN-ND!5MWkoNgF2xHTxKUa5(8+EN^pXYI7FF_pLU15F*(bmUeXl{rWVqxT zfl1CgM4DlntKP)tOdA|XcW$>bISSi$HqKVFS_`IO*)2CgAWs$yp40op+|O__9wK`g zM4)HKUuLT~BWEq0iczO54ZMlN6IoSfCr2Y3Gr+b6hf>dLq3xs1(1L<+QE6WR01=pk z!3vMdj9^4`nY>H^po?veM0?8u?PVLDzRN-jcw?ngK3K0!A~eg0-u%!mzwr)`Lcpee z@F34S{d@g&u^Dy(gRx|LLoi7lrHHb4wFKiWJft{m?zHS6wo`LPfI#`OG!*2}d zMq=dF<)5X0OC(T?xRrk)^LiASyEloa9O_?urZ4Tm0;Z%NKWhOEjwl-K3WB=`>c4sC zT;^EhYzkxf)T61d(w+V*K1x?;C%>F;uVTh~s-sdM~y@vCk-KIMCq ztA|?Kz#r^Rnj)K6(ZDR({HBZCn^q=Gbr09tm4nXL$?O(Rl8_*rYH= z1(<2gcXe_m2l^H?oas(H?tX6+`#ApTyPD`z{ZC8HF+T%47pM|?{32_~j!0T~0X1$g zw3K9*hw~ul5qKVgbB*k*=|8LUy9ofPU=EtWq?1#*t-M=%!xdc(06{>$zxs!Um!vmO zV9xB0iA8 zv3{Tr2URFQ>us8zf8OhU#M_0$M&Ux`DrhkK7MK0}_3^Jru<%@fpMa6|lnIycqOw>+ z|FWe)5Av17ZB3p{T%=$;nJrO#YBP-J}aa1 zhgi(LXK$&CaDe?BsMmaNyZU#s87JGL(~7U(1r|K!+$1VF0(9DW2||4$8B-5Ec=u}4A%aU^!^eBdb!cK} z*euYqhQayUSKnJ-`NER&5Eeo`>3w~TtXF)OcWlhM_!W-NtD8z-BreH(gozG^wrK&( zc?~z~o-#b2)}URPiMSuINGv`=Wq1iPVmh%wIxl5Y_bq_A5X=9@Vi20oTUvb3hnu** zAb@Z#4*^)%Q|4RyoW3=ea%`+%#}yLW-h#DL5_%>PhD8umsBJB~ zYX%xoG?WL?Vt(!w_(0og@{U{87h!IFZ;Jc6#dzao%U>gC=JKWz1)uqMK$<}eF?Qg? zy}c6m=f57)7B}cX$Pnz131iqmhvYJ5^S_dt=4FOq_`q-7Qe}oW^eng~HN(5C6P>T`#>}~o>H0?8dAXS=1xex@NpALnW*_Nf)vWnybY?jg zpS6?mYoGC1UAxgRStt{S-(EN}cD*H86#xTP_Src45HtXtGTB3KGDtB_a9`r$If2+6 z5Z}~-kCMsF@N&xC+C%Chuepnd-AVCu3N75BJA)Uid9ih^LkDlwZB?j*A5_Cz;L!(h zvTf1vkIIjqldrR_aWO z7W9*#5j-Zg0DxkMZjK2z2HvJj21hZ}fvWAi^U(RK9em~ecmyjaN@n@A%vIDFHagpD z<)rjFzfW1GcncQV^)Pi(ySDE%&V6p_os|5;YvVf3tDaRb$IT=51gLp@P_ehd!8?~C%H1E)FhK{*vWb8M>2-fAqD3e7mH@l7Cmn< z>JkU}B!n>yC4{-*yK*Pe)oDZ@z2_8B-i^Sp*jxc4P>czDlO=oQS${j%Q)$kL2IU3!Z?x7>Ec415abKdPswOi z_pblL8ajul<`KcP!}f&f5i9SC(v-ISL6 zS?<}#SSQ*Dv=#tmG#s^~Gwau6=+52y{K>PhmHTG z&{_ouEg4a9>=2$5tcs#BFo;4+e02bk!o`QpoeG1&s=h3%&jf3Nw@7}nZFZXK5u%Xk zBgzy?rc92%APAH31KRj^Ds}XXu16blFPgb}4U{h#pe^kpJYBa7sQEj4xy`TDA#B@!>Gwg;EOTSrUEoTL8xqvP)tJK2U?>j(G+Hdgr{|fnFd0VwP&se^5yaknyU{ z!_J2J#7BLkJ!8$F&e*+7-WK||$j)w!B95|mx|$OW0>hO{ah#`bOP`Kq)^{FmoHv+DD3>9)p5Bk7qYR^&#>o6LjWTP#qJX zG~QH&V}=|W3m-^JY5F)nz7DMT?O z7Z45A8VA-surps7?yzY}W7f#&r{sif_ZBS4P*{i{*GLwsvoKtRea?=a>dN-rZ^8Wz zyv@HCG$8lp`&&AjK;&3=%VPYduCMgR|Hd(g6vf&ZVY}||n>N(W1) z`N-g`?nVVp2xeMG!cPKq1S`n2VZ3g2QqyS?Y$w|x1`1t-S2Z zQTLvka<|W|eOhAky@5ix_gnqgU+=Sph4l&p>LyO!KA`Jc&E7E7I0jg~skx|3sP@mH z<-NeToW|vw0ICAo#F|J#wSiJ3Voo|$t^H<{FN}c`w@O4s3t~K9;amFO0JeLNkg7*? zL-1;C_jN916XS$YKJY6m2l$=`585pKF0eTlv2KbHe@RE}n(`5PQE=yPXrJ{1pJ{KK zj;DR4DGvt6CILc#FSBNIjcU>Veny}_Q~675FE79f+dovt#IxFL_gKd$yTN86wqaY` zkox&Un-9jPqSq0Qc2ng{P0VC&APn9*8Fs3K zE?{)wx0cLtHD#u#@6;qhG`v^anxyEnDJGm-%Ju5(j1+oXlfdUu8+}dkKIwwHe?%(|S7=KV4tvUx0zvygwteM2J@;Do zL}OF@RHvLM3~_8#r1ohOO%|JdaaS%N=Nh9)OeGOcS$w{MeOA+EQ{hHFd({t1Xm)=f3etF3Y< zEaLCG1bD2#9mv4(-P>Cev2!9XZs%Nzt(Eln%+0mA3M?MaIhIVq| zXBdoCZ{GV2+kG{`f~WpYv>^@Ko8w-c3-S^&2uvQmGcygMr*;OL4PP)C|6I$zbJ0Xu zM+REORHX2B|AOk#gOAij>{Q_L@JE&KtLq6IfQ^I+IYJ3VA0{G)S_(RXHuxS_zJ(xP z=2J7?qA|>)BoOmkdkfaGxKkE0Hp;Q_Elbh*E!ddozR?+jSg8X5Eef~`Y|QL8*(|ha zG$#e~50vB8@R%-8{xoCoFqC?lr@U8Nh55hA^m=ErWoL#oVOJvb^`7mRSIm9l*$S`S zglGo4j5v6ArIpyk#S8GEFw`4fP_qh@m3{yx71P?<@1-)q+Q3(%d1!xQ4y}~a+Sy;q zSGnzS%zkhXpOnCCw2S>n*C#r%mufX0D~MWMMPNl&`kUzm?>pzWX9pHFZ14 zG!y$&T3vEm6D{}3EBCB~LE&naO;-htyM0&xv@5Il))mO_G+1dYv_I5!$^LD$?DG;Y z^>_X(&6F2dT7%!Bj-rdC&mz{UAivkx%au%ghR z(h?Y74{EuiX9=_da}h{dSyAL?Pb>jnCM~iM>W?D&vjy#_kBN4CXd}~xOczW3Rx6&J zDGHnr;apDsYV|WB1BW0yV%4aH?#e-V;SE?_WICpC+B$}v@#826_VJ{)?0XZE> zEjewmc9zFi6D>@MTTwjvg8*isU*-fmKc`a~iKk!^vB1(!4~|ey64ychk%u5I%lWB) z;$#uPm{nv_#Pu<#Jgq)x%&tO+dd>YHls?3^ob;j*7O&Ya%TBO-|6tL!`Shtxj+w8S z-U0mV=+^aVPIk`Z1HSh+d)7N5duZWXfVDATw=~b6$_(1htEa(dDE9>g~KG#EPC7VV5nhs0%7xt)}t}NK@6?zS!glc zEt`%2*Jq%U>le|tqpxdj2i=(rJUy7Nyl)Myo#h(At1e2H4zKHSX=ZN$k=23ic-%RN z9Z1|sS~F$Q_xL)9%>cUF-?CY?R+9VhN8W&A$MA!gcr%Z~f)|{a7iBU#YG{X!1}6~z zZ2aL&=rLv9YrC@e8-YyE+68ovGotn+qPmO{o17MJixzTlBR2D#eG)nH47BKZ2-7aS zo2_)LuD3P!eh=3odV<}e2j_h#T~}o^6KN6XQnn!*t*h>@mTPv`_bq_?Fo3z$RZv@F zeMTM`Ooz~jjXnn3^IE7D?&nNok(;c_PxMklYkMn*2|ITMMOud5J%8rlYQ6`bF<<5fy57lS& z+u&5CchhkM4LastGC|o7TbH-Vwjs3jK`C>BGTa|yU1u%&WVIm=zo-{1RqVMFnyscR z_~bwQtOuvEld+xd#N^F)_Zyv!<2dQ$d=+w%wn!RBciubt6Lujl-X~ajoO$;H{oVD} zz5%}>uP)DNG^3W|qT>L7O+1n^ne+-g_-4tbOs2@4oA3GF0h2W27fkH_9GUTnhIq0^ zNFvwD#ZI_9t1$pHRx<%yO>kyv4O<@`;3@TL+FHzct-J?ZN22&se^eUmG)wU98yCQkfpz zCWsllna}<|1KYBXT;Q2h4kg5>yWsvQaBo-+BZ#`G8FKb(&Ok=wt~3Rl2ykrcZEJQp zzi7Y|$va8er2n03)9(5EtL@rYPn2!~TeG{3j6)sbAJBi%3;+0ftXF3o6pQIS_B;Ec z6tI5R-7XTplwF^3Zs?`n1LR{Dx5;-|PLL`0P*Nc5%9}e2zXffqS)H(WUeqICo^r<> za-UCLSW70LpKrF$rH|Afo?>YYD;c=u(HZ4CjZqz4Fh3aKxx~x0=4dTC zP@m-Olj4`U(JS)Wx}##vsA%JxURNd2?*nf;{fO;#(dAZIGN1%Qh$6Y|4U75I`zr7s z^pjK_GykH_;6MeU?MU@-c}O=oDj-B*N&WF@+uYL-dkr-vT$V8h4U^D_XX^RWb{gf{(8o;N}iO~!H_IT6;)<$*DyQJou6l=+NY&BD2J@C{Y8zS!yd#h9OrX>iauHtyKT1nb7Zwo5ckv zKgK|9=;0HL%kedFMY;nz20NS^l6R$#Ss%Q-VidW56#sS&9K_OKPL$apSvr3&)f1k( zo#1ufV4|Js;`;n+$G6gd<5{o8_O96H9waUP|2ucW;SUn~xEOnL`7gc!Ga!i-dBoL4 zJ+p4e_aXnTSTAsVaoGP6!SgL@k|2W_qBiC_q_rM_L&JPDxS`J2Wv&~}LGWVBgnApe zlYfwGlf>R*r~gxc^_4e;KeJPYKR&o7gWCf2-)5~&1tF(@0NCP}*PnY5G-Zdj3vNRA z*czk4`NXL|oZW(n-3$(NLehxCSi{d_=bF5tss$o4p5S3F*5Z4WQ7K z?SZL@nIEY|CxIUi3tv4*(|)Xt6%r~w8JUhH8t={m{NjxAQfo4VLu9nNXuaa+^V@CF{1mNR<8AWu6VWvL6; zbY^tNEyoy@HA-aSGh^aYag>ljwsiOh^vIf&l}+ zx?A1e1=zMPG?K$P$&I`JP+rb`F#WmZE0cW%Fj`A2kgk*C1q%FK=A7-s$yGlI&Wm0O zMt;v6Q9C;IR6yYEIZgiMizQ?bLT}U0tTSUYm_^UceLS+?G^6af&70=RBYjQHaW0*2 z?Oy7A$ghKO831`b_X`NY)W1m!x_8Ia`bnoQf zUj5o_&V+u;yo?@=&mKjeHTuU^J8-M)BOYCf7NByM0Cv)Rb556bT;y5;`AkL)@zx_u zg~K$76(KVbrI$jlkHrZC;1l)DkTwTT+0JZd%b7?BHo$I4;<8Xml_YQr*$Mrh{QT#C z_Fw!L_EFLKh|ik5*46uS-Bml*`gY*y)^=`Zhq|AZIMhG!d23_vG2uUdB0Qw z!ee^Oy3$TF;BzNRup#Zvr__b3=GZ;9W6~rpRB(tGkyL&}es{ypM;c{192aPxjOQql zhbF91vHK`AyE|ddcZ%o#3F6AtsjP*d-fA(Mgm-au-au%}R zwLK~5Kc}2}TI#ecswq-zk%45nOyxcx8$b7=ckVdeHziGy#=u1aO@=lQtjwTKU01;A znZ98we3iw~A;be|lz|=Y#_>m5qxAr_t2b#az(o^A&F6Y{#xwDe zbt?cj)nnqx1Zw~I?>|ze`TUl?bG{k6+QsZgLyQmXhO4*_z&CtGEaW(qHrc=OKP^D2 z&3*Xn|LouWv;D`+%XS(z*Z%po`+rO&lM4)jxqFd2fjV`9Ux2YqB-#XXA%TO2fkc+- zAKDOajNkMj+9w0ramd9P`sR{%8rHB1`p@oWK@QDz8u3*5))d}x>8p;=kIJ5SvUrzW zz+qu5nm_EN^uJyCZ~s64ZBH~+4K)@P6A*E$WLZs0OeAKp2O`|xofNArP&b-g983*D z8A@3gndksG30^P5S^=$b;4Rq4dOOdlTc?M+RI>dQIJu}0fIX7FIlax|MOthuWd%+F|w)f7C6-yFegHAA{e-(+nGR5>Qr zLU&BteS{8ew$Ab0yR6WKrHu^t}?8maTIT=>AII^0@3SxyHwzr2mvb zqswd4*JT6V6hodLZ6o=09;th6)@=6w)9>UTJx6?pmuC>$DV@vQOg5-|LOO;%=gYv? zN%{HqHG#p9BQDSCa!!K2854%yt-i@~U-Y*pf3n!PrOq@|gUo-qi0F&XnD7^~|IhU& z2w(ax|6llorc|VlIHy}+TWlL_8n(ehWgY8mYGOgh#`H$0noCHlGC2vbHTwubT_&Si zY}SjWzVz5+P`mL8@1g#w%ej?(0ImyUW*bKD^j*eR5~8wFw`Nt9KFiXzV_$9h{vmG< zBmc+$>3_{5Sf~;e4Gm4?4Vp(pdmgpElFZPLY1RGvJV^J^o`WX{ij^1aZLg3ByX^2wSAtD}y0 zux}c1&%%khkh!++0fIOX^Ww+FnMFH31&b)78(F828Q^@|l;yPytSs?dIV1i>+cr*Q z4IVnB(>B(768f^r6qT9>$|S~Qy`yd*^1_gw=Z`3gT=Kf;RcmHk#Hy3anA0ubr8lmM zSk>kaJ^K#vT0@V-x#UnE$2&T~RZktET+O_br#`-tFQ-LfYnL_#QB6k?JtHH1WL<~; zkGy;dpy^POR>|%Ss`RwJum@j+oY{N zkofI6m!WnvG&&s>$9dUChjP{RAM54KcF3p)J(ahh{#!P09*9AmRYq3_t_Cqo5(r(Q zhE7X>7s6lY{7h{TIyh_t(tfrp#e7Jeu?$$1Kp^q~kSbdL0FPfGz;F<=lKGfSJt34W z`rYjPsJhpGqZoRVDfHcgkDPYc>+I%R5>SIp+Htrx>9N?riw{))bHJI!Dm{P=P9IRF zHO9@5@pO~p^c%CCky$7u7X?=nlp>kOXUiT@|HE8$*g1YIR8#iy|61QT9jczy&<gqG9_w2^U zalmeyOaF~OYx-{b&o3%JeF#-C=MDV33(nHuZRk;i1}$NlfJ*y}xk%Gvo31I-kO8tg z@TFUm?36(99es>~zm~=I;WubUqk}*0fGn95LqMIRBg9}>39y;v!#pD7L#h%%Kq<@I zBwa+2eNxTLWm|{+BC@Ogi!Y}IIXa$fSK1s@Kx&m7#c<6!SoCpES!mp8gQT8ol*wh$ z_S($;tN-=?#{RAR52O4){-6K%_S@Nr@qMoX4R%X>;boBM=0-gFf{n~ z;rB+cs5&?4g26c(r)bj$0A@{qO%5{|EcG z@;{97fBAp^pKY@X@beL|KQ{B+Gm$JP4X(EYhDeO;%wkJeX|6?ftv7gv-A@##b0MeT z%0@?3>iU#JE;fDIAy$F6N&kWSM0x3NO=lsjoR+ICDgFPi|L6ZF-wm>+<==eEe;?() z`~UuT;~5axM9r)^K#qro%h|Mmb^i57MuR1-F}_CTY3g)@1Rn_U7_g`(DKe45nayK*&dbWMDKJ@X@1(yJBa+a-6!{cd;NCbeK-C6{=fhC|K8>RqRB^M z>3`%B^VrU}I*n;!p8s@1IwUvp4grQ3Za5rQ0F;J5!eX-d$Tmll;Hu)x3Oau>L+vpi zuz|`5WjyRZT$0I`HhMEsoUsd}cGf?pJd^$_ij3Kt23_K z$NgxL)m!_u*xq}i`&YgC5C7pmn8D^am4Qbu&DxHN!ID3;#|7_Z@UijSeLDso#_9;Z z>&QmwjQAIvRZh7wYu)~|%iWJbYA~w$H&ByD$t4QL`T)N1yiR&N^*yEmbTi#`^h9P* zfE72{yv7%qd{{Q$m<06y_z(R!6<0KC6Zq0yg#QG#{Ed%s!Tu!Y*ZUvRyw6Ebe*TC5 z@Lvh_r$HW%ASP%D9;?-NMxzdU?iE1S;WqGHa_ZcEsWbc&kAco(-aW14T9;nxv)XY> zeDm~~aA-sh*6~+Mcsm)OFM?$l$6Ji&6B`XuHe`G8JoJ zNXK?m>H@P=!>u&sjA`Uep);UMMJN9gF!cluUgP5p+m*UJ&AFuD_wC*VXs+{V@UaU* z{wlCLTDLZD<^`e#~-M=UUQecMZ(MQe9F2 z!)xO|vF?-+cM;L>K4mnl+5qYe)$lx~$_waMl38Fp9F2ZYgV{T&O6mhY(S%?GRN=pvDkzD=ghd9oh2`M+q$zCTW@Z^ zO^5+s`QnEC-q!zW>r4E$`fq>G|EnIv<<7X5&wz}0!S%4yPo-~tfHG>;P4Rqaya-J(2LLr2?OEV)nLltF4;?#AopxRTeMsO12uYy(;`8O*Jc1+xDats7i_WVJmWf{6WHp+t*H40~Y zn_c>zw#S3;EHL*OMs$ZFw3Zn|eK=BgePEVtWeho+JELHB1v1Hty_J)^@2;ub?drc~ zpxPj&jMb}t`}x+f*$XJMu4{CPm$_(qZPr%cM@&Y}D_VD#fo77$E1o(P{jKC<;4zT?#vOFCK(kgrKkov!zckcZt*8nr_B~r|Q#7{|ODvUL_AY z&F=02#!mLSjXdi?u{{1kMcwyxPqH_t+;m{$tBS#W8?#poF5XvO(Ik2E|XXYR|i#`x2 z#&B4kZOd3Vfl)#(wIeZoRy1VrY*bbn8LzW!b@d^fnYXC(l)F-L;K!S90BQl&C#PdS z4=ApGqjHVd&wZi(tvqYDiLy@)LVy1y``qf-eqPo&YC;&z_{AjuX?%aybm0#wlZjwv ztSVEbij}f#&2R*t?|5odC|?;OwX-SPE!!o+iq{8@Btpcr*#YC?CVtW3P{?;?zWNA_ zM_w{kX-^Lbl6|wq1OW_p^@*3g&VH_G}~fVm{_^2r%Ac?|gHiR{gqNjJdz` zx9b0HPHu9(r#o@G39dpmHma@Izl1g8OI;rzWZ-k9FIBbUb}@)8Oe|^1*$DQ7KEjTJ zG&=ldoC{>?hR8x|I%7}$|9R*)Y~8mD^_i-uVpYml>gfaGLx+EHTVF&XSamzr`Df^O z?JO(vb?ECid|uk!`q~9MrTgplFY~Xt6uDXNQoSf*VI+|bbJPx?S5xQ&HbRl=}p5)dLLY8F zL~nK&>ZXsiDpkI4ePg%?CX$&@7m$=vm~Q0DvW+0KsQ7MyhcynX(r+??2nW?Z(wKjGmNi#e+s2q<8ThMc#~ymSg}q9+j=$;O8qwH!t= z0h$bz{Y1)7SaV{ObL@EJ+%lMnItxl*mY~Yz2wL=UFN`n1+b(Oq0bXx_?33@ia&s)& z-(mnx%{KbI(|f%?w>t$bpUi7s%{9zEMnxd3P!#PZ!L^wHa`=-+lU(|PrH%9tbrv!K zTk0ZldEtj4I8&0KB((f|nDFIt+zPvvL$Bn_Jkil?Q=NSf!g}%J<}J%@^LGoyU_;tX z^j~$*R{b|yfoPLwUp3(-D<>dvwcB?U_;tGxk$vWiw9Q}3EvV}Ehn=eGx1g(DNh_Gb z605)tny63^*BF6xv%#ZcJB~{^7LH7qWgACwE0S%I8|)ZFD7oN&D4^U~T!Va!lXw~~ zGIPaV&%)%~1h9<5ufgx8pAGsd7=$VL=Vfaeu8T})W4vyCk{DDjH~Ji&Z0$7ejhxu> zyBO*v>@K?}pY(>I*lrFW{2a8P$Hrg$P7haVYkx>{$KwB7SEK5pPEQlY9O_g#8<%(D?EuN8{30 zVT~Wz`i@cy=W|0w09`E5m?oN_frhuRG`@UWRx#E14k%Tr20=#CR~XT#XEIzsZ3t+y z$w!elxs>Winbyl?+{gdQvCWc?;KRB~A`l;4b8Ef<-%w*RzDGG9TXsO^@~@G}v;#~1 z-FNNl-d~#26ED`Y4z3NQUTbsE|C5vOG^jiNKPt!JO}kk2tP}nj07gKX1GaMV7`8mT zs`xH#WcDHgQmPy913lRCq7fnVY7Qo&fu^2ubhI5!4Fnebw-CL9cUW|meR|WqCfTJ1 z94eCxM1vTt z+qn?mivQQ)Wv%iH2ogqzrCWw$t1ITHU9_oZ)1cK@cO%!?$0Co4&w_NE=NO~!Vn+or z9se{9n2#!2>Mu{8a7wcJL}BvRCExlYBK7Om^nYv9mD_`z++m4Ro!z}#@!O5*=FQf( zIwlCbaKfMTXQuD5$|Sp&{iKM9 ztY{!IGuVw^GJE|-cN*v@ zN8x57Mk-Xkn~O_1If41!PB~8kv{Q`Jy-&+;6&QWqoaW366mhWGge>pdftFbY&lLLM z5Jr}UvO-W3&>fzc4dXGx48+ILLIqX9M}zdiL+*gMwPbH)p^&|`Jfj=PFh|K&&Kc^@ z=FOYFgXid(>D|<{?~S6t8*mph>#GCA-xtt!wpkkRuy-P6e>Se9Ype6w1sWd#89(1w zfauyTg=6MnrakNC%?SuF-nKu{g&jJztt2f|qu#nT_>XU=9m{o1x?xiW){vncjYpD7 zVNpIWm%3MaP&8~FzRt6i+)-znOvl~cgoXPO5Ds>}az{Vv+<64f+{f6()Zjy0=hPuz z8!3Pc0nyM=<7~PPi9C%yx`(3gxTwKVNBsA;`9^!kqtaaG*pKbr^m1+2~5Ur5xkD=an~9)o%1J&q|B-Hx%_e* z?2tLf7GsU4^uNql;Irv}pDf*VG|@*%@OAwkLm)tG`VSqz6k}Xu*e`JlM*^4oj9_l?TSCv>34Snr`t6(Z%ww|E!L%3~4> zqniQTr+|)a^O6cj`$zbgIttl-gv^ux)b)YoD)Sq%JvaeAO8_(e$k00b4~v+WITHbp zSI4NFb_Wl6rJ^X%tBh$B%|dzTxBr_AHflK?mnoH)2eJKbGT*n~pA-cs+_}P zkiRsuJf7Q7-mG*^_gr~lD3$J5B+yfSlI`!!ktx!Vp}Pb=>;}6ULzl+0L;z#K83D}( zJVkG!`Kmgy^~}L;wc{nL^HxqWxdZvyryY11ZOl$?U<(jquk)v(Hb`l{^)t7BzkY6; zHW!sbswaM+{Wk7;)d~(= zf~ncrtC=(A!9pLvPh1Awi5fgf$a%KJt?sQ(uq@fYAV`;LFeqkUp#%4azaA;AJh$jX}$Xyp2R zLoZZ*4T&fndkB1*h3arXxGcqx;EEwqfmQdW-{WatSTG$T5iQg5GT+vo$PViXwS8J0^Ji zOjCLBQ=qQ2rtf=SVaIa9awAOjF4MU zYO(#3bQr)_Do~s8i$s_m!Lyb(aB@?+o6$beduz9II&VsU3U)??v*EY}Ca>VDrCbS` zpF1gFDcd8l8U10s1PQFyx{nf^M^K08)pH&}r}R`9yBR+h`FcbNBqpq`V{oY>=BTPi zr<0%y(9RkWxu!dbA=~dy(4oQ008L02jH!}mJz{&@aLgYk%W{s!8~NNW0pq_0WPEae zy>V+(zH+9u15mA@9r*DxUw;Nyez!3nwJT*xIR;p^)R1!Yzz3nWI0IRt_|fjCHUZS= zCS7@SI}V0 z1UEzIUq%IWJ%j43U-`;vKIbHU#Oo-%V?4oLYv<_Mr7`p;Fa%?5`rihAS;xJ7mHCZ$ z#ZaS*T>^CNWA5uMz)(Kg?}=XVd2VCt%pCh`bnW+kXY@4g;URRK35hiN0fQHYhVk<8Ia*02QhAuM8?C34PXs8P#A)ZZrvl;}F8n zFRy?pcEU(zriY`XTD0+$ng=u93m_BvV|{EhH`-G(rf7lSGl+Vp>6%+^+}Hh!K;4n`r9QJX8mvd`U}4sI=4D{`QgWM_blp-esX-oYL`L4 zcx5ohJyDb==`@Js?%J@G@CC5rN!#WmfXetYdwNXKEvE5CqcOUGKX8#vmoaB8S*Hpb zF#aL>GDlj}=b`i?WwO+?9zbGLMc=wf5`|8!QPJE;ff-fQhGLajxp@dexVj|jK*CZ^DK@FL% z(^Luj&8!DDIgYf-g{>?xpW+yGJ*DFqW<>j&CFSFQ*^(v=2X;A!thm*#$;3x31(M8O z#}yIKNxmI%_(=K}4+|nV{ob-1_@m56<`U4-w{Z zsPSq<58?+11t!Zy>T8R5+%apG+n_|70mSsm-?kNQ(vw+L3pnXn0=({9iZ^y+u*Stl zYaUJGlU$C~4QC&fi6j=w!f+SFpfHl1`|_A+jPAwpI)kj)3cdmf1t$y>>?sJhLGwa$FdDPJpu(-V6!P^;ks>9e_Nkg8mMs(Fj)1#4-?9g#|pS;>V8K7>n z?rnZz?r*dOHxZ^dtS6GJ3PWf0U6c*!ctqy@AF* z@w90(1ILF4S)zUY{B4WAhQ*3^0Ip3zlNrF6+DQ5!mt%&M2g-NpF9O?!Qz{7RQvTR+ z{>`WMOv-6Y*}uwSXdl`#fffwYz>k~LG1#bk0wU9A0s}59caliTN=LHo*Yc*(;S0U= zN%{A*SpPaXS+DEoGkcR8+W~vFyI`76@lL=}3n2KQmQJMl1uw#5$npW0%%b|1^}XHu1Z3QV z+3no!*ygW_bE*Furzv3h5B&`>&Db|!44+cgmri9ieu|YeaCyGX9t{ynpdoi4%+`l{ zB^F9o5R|P6u=K2y1KeBj?7~wbHaejYo#QiFY~ z11m9X`eehsEaao-`cUp*;Th^bY_P46KYB1?eDi}krU?2yFXeCGq8*!2zu9epd~JAD z_>ujhXDVG@+`o?2!Sw?qXbf@Cf-*3Uy8z|dd{=_$)+VwWG z?bxd6-M56`kFWIqux}<4*K9`zrDJsmICk0)=U^eOupzky4K2Z|l!ud!_} zA9UnMX6N@fCS1>dzaV_G%iu9C_xyvPx%lk9rR~0K0+zYXO^O!fKbXPfrnuKD z;e>ey%l zYsPdK?}m9(ZUMntfO_kz%k|X8j|A7nk#=!2N_KWE$NC@6*HM@ErJ%Z*^-Q&^Js#RH zJn%9w1RK~zfGSic1(-&C+Hat23ze_vlf%G51D1R+mq5<=ELYSRjOO86^xtIJa+go^ zA6e|7^IrH;pjTj>Q!J$ib|l9wb8Z}gSLN|a|KqS?zOg+w z>vpuUherDVHrC}_J35v(KcI~l-LkVDY$;uWmg_{FIJ?+{pOVjj!2XR4j|2(?CbN;*(9+0s@XDs6-wBPi5H8{M+6*ar-oK~PMC zGqZU+)B6reF%V=Zmi{pJh~aWKB;-gz%WhbiMu7eTo~AK=-1ZIdk4jyT5dh-e zZ~7~e>zsTvw%F5lYd~Yuc3?rqQz^%#6BIhGZG^0;WO_3o89K!P7HF%22;vlx>0EJ# zoOMvcV^k&CE-}Sswxf=9Kt?ktf&Q1QpY~A8$5p{HxSMo>ZfXU1Ww0@@YJo0TW)qeFCe9^(7?^9fnV^0!Usp zOAm~W5_9HTMMI#}7<6L#@mWW{nm;=MiGN0*{YlwnO*IK{3$%AK-PU|l|E=5tmOXfU zI6iCe=0;C6W^h=p3ctCgphG#NVb^1{G=bKF$#WS79EVdYi7ypHL02P|NgtZbAl90m`-zkQVNHYt_H{cAb1{vIpB15`ZLYT z(7OO43hM!|>_m9`-V8w6{!I9G%kMQ!2tG3rO&n$El3>-DNC-GAo7Y*u;8b3X?<998 zS=%=KrSn+ksRa=9nuBk<>(Nt3_5TCi-x>Z>+0DbJ`cFN{{{-NV8-vWrGhCVDc%OhJ}9G4;-_d^=D}h(FSuNWnAD&WB1Yi9aI^>SV~yx`~`SrwWNF zXm(CW$TSXB*BQgE3TWgMxQ?s%?z`^0GT(cXy|?lPcuob0yHk*~Z4>t$j2$072dr`( zpFIeQ`t-Yw-vXLJA@rF#tlRJktTU}i>Ji&#Tj)xcp^`%dL{P#EUVTcQ$^hv+!U&WH zZ?1tv@*rFemLwqLXtLTDd<=ZxAkGKo$&cbEANoH6>NcT993}cs6TpOZ)A{Z=0s!0Y z*yLh=Pr>r3-DK)F_o4XR-ZmRN-9vx47Za^pUnl+G{TF$@wg0rgadUj&4-q1N8TBuh z{6~1dW06{XOO_|uBm?Rp_&wzOAEYM1ooB!h)`7yX&;T)ER!VKiHa!ndl~bA=MfDAh z4?@9IXb$=j*6*Q&HtaznCmPH`hzEf*>E1d($P93eZ_rlb@^SgpdHe=I(YgDX)*DDV z^>Y&PQ=1zfr*=D@cGo}gnGpq`hD~1_g;R{^aIvdOdM;Q7{3Uh-7XN9-23^gY}9JJ%I z8}larOOPM2HLL(zK%~EZ2*&4Y{rcK|m-St1i<}?$-hE&C+VHsS1ia8!US}IMx8c2* zcYqzHS~8sieh5eQi5JkMO-|4t!DW|k$W)i-eyu=@>lm$$b$J6pA)h$Ph$XEr@O*6m z8o19xi{dFcEHD;j1*rd%M0nNnPLvqZ;^seYcH0kfGRxOa&Ti!mydM)$c9G{__H_b{ zP5+zzem$++_i*e6tTy+={|}*ps;kIZY0t`Tn2O!j2Ffmm0*i>Gvxvoo!IYAJ)@97{Ptmr2o;zis*^F zo)zR^k8t}Sm!s)j4|Z+#rtipI$*U-9%xynsW2JlI^$$8Xcsu(v%vbJ! zt?2>6R6Y5C)Z-BOQ0*iH!L3Z5fC*6wo7HKabw_99+pI^_a$f#ZfK_vK2K~Eszp48h zrIJS5@&>SW!g|Ygy*WPA+07Z*RFQR2w%#T|LI6Pktt;3O_rQneo_DhcP_zIbW{H&t zTG-q%Da(d14~%i_v}5y){aVcrG6p$k~k%XI}Je1#pq&JwdCFA zOdlosavrH+^C_vVWwv>zI;U$#IXsX%;Tom)=0p6z<85chPHo=&qjmk~e7))auG8s~ z{5jMf9eNYDVI4axR~6Lr>)H)1F|3Hg#=8I?G|?=TJ2If5?UNImjlKp(sd$JM%bAQ$ ztfZAHDB!SmVNi*{DRg(AhK)m-#;yQsJ;&)&R>EI)K6b$5BOu{-rJL!ifc>VtWdcq# zXJ!1f-`n`N!XMg~E%z)6j2$uzU=+=dClJ`i!kn0fjv1d1bQ|oVlc~W zV~**->SYn?z(V*4%J&!r2IdpsI!%1Ae(1%Z2AMtto4gcYE2rA}@G-B>EqKQoxf2mu zW#Z81i(%ICYFIyXD)W6TXAZvcw3EGD43mbxDmove`J$(9I=s`FU1^B}x5Y6&JJ5k6 zL#qvQ2|z*N2@Z_9L+~TP@%+{{$TNdv;m@BxLN-LhH4qp1<0pK=!0fW~jR;|^Z|%Yb zgPKu4!C2ID9!+tubF`5xv$An9T{6%k_(+fkeil+qZ)51Eo%MK@A;?Eul01JczX3F- zw(5`cx0ZNG6r9F&>SJ8%pQpCA@mJga#78O zlsCk>NCc2u*xd3l!^dFS$tE^Dn_^ZPWFIW|Ab2 zHg}m!82)7Fr<9)dwq3aa{&|gWZOSg&IY_wJ+AEGKgs}8{)j79qu=5xH`0)ASgMXus z5`c`OAI&D_jZOscs2#Oqc-f34c0Pm{KcC6|igDD*V&-{t68*Qg3~J=eT5400tv}rJ zFlJr`zfYX&CFRS8vgG9f^4$2aAXy4}y=BH{_C+O!;?IsErsrcCqXz}p{l>M3y^wqa zG){H>+}~VZul)uHk&jDXGtI3dnpyvXRL7Pc8ZC-V+a3u#Ou)m>>BP$Lgu0Xwxmrl( z)N%ejqnbx5z8QFwBsN5YAfuetFr#zOzihLYjN$N8l<|mUm_d!N?@wb=}y>g0-oOS0nqIHv8-MM8I=B>z&FxhLaq> zjd$Dr!+X1N@4(gS$czzh09tuvYQka-CZ>?RW!Ofrtii@e07!=m?r!@; zOW38q$jYfMgQu4|r+YJhr+c5!duY7yQr~-<-{^k}YDr`ImgyM=vnF=6XnM*OthE~w zG%F8oYr;2(D`cmAVaXK0@MK2@Ht6H&IU1jAgFrVE4}8en6bkWg_#jyq6;Q`abM|-H zNd$LEb?SNEH+^u96HB0bK=|F}Z1w*$3wrM)mj}p~KL6WJl=7I1WQc?0=0Jrcap*&1Cmm-p@<_QUU7P zUx1hPdAfdzqHn>@jo*_{?)pMG^`&i(_cnDHAl!f%A&i+RppIyUF-0!WMGL0t?Km{t z%pBqPW5J8+f-gUSqJ`QZb$c$<gVY@?xaz?m9aa~KKY!bGlP%9_gz zq2qkUqx8S?tiA)uHT$T{p!szFC?~J|s659!wOX{jG*9 z-$55xJQ(eG;eX0$muG2Cwae`ENS0X#Wo|Yf6-#}CDH8p69cw>klf1rylheI7xtvQ# zGGpn-R{d2vztz)Ec$;xtw6i;$3T zo+x4L5jm6PJcJf(Q(lM_2OOv9TDq*b!PH#kb0c5b{MHdamcZN({Wx+ZzNP1v4tIR& zy-+qU2%U$(Z-?J>kJyHK(f+5`Q}Caxwc}Vq zZ=73{WmtY&knQ^m&^S4j*Z!;TrCqK~TW18M?x?^cc?iYe2%Ldz-xZ1M-%S%z%}3Og!11oImPC?d zk+phs7&ZLVTdmVx{cbe=fN4HY#KWuh-+B;#B9p~&f_%XL;51ftKJ=>eKj$kp0k?A< zUS!YT7WacffZ@KMm(h{A{6*!TQi-2E-M4$UAn4}HR=?^cUcT>Z*I#UQJ_h~zH35X(um4HH)3}9eLmQe3@~+!JnlFi$63&l%C&FEuo@wz@mvd&JVcl z3fymMSSoE3Xk7w~1$&)**~Le^;;6&*S6j2upP%x@o>!s}l3^5kbN*utFdBlo2pf)e zWKGz4G3khGNdy1nJi9^o0C1AFWXjxeZdaEo_1n4iKi=w<_awPc=O8`Z0SyARQy!$P zj5Y3Axh5a4perUKDEu@sC-a)D{Z0^g?~mPQ zZ#K{OR%V@3d@NUkeZ6%z^e1}%|F9?H^XI>ulT6kaWOS!qvp)27sXk>RyShWg4;`Cu12^OdS5)_|}~v zfs;XAr%vXz^%tGE$=(I@p9(WOU$?=B>9Wh3|EvF($+Wh5+5UP?! zb%FgDg9bI^3@|9O98I4!ZtY$0!}hify5*u-AO_|zfuW>!!!s! zIk3gD{xtedr>fhdAwBF2vd_oQ*8BEpISJu!+WtlG-jv|h-|6>jM4thp)_uMk&kGvU z=+Y)Wgm5op)J=Z^mKQK)|4WWha@ICMg`Ipnx zHb9y`4e>>x(^hj(FLBwa`cC9}0>!qa>BtEPoouwXyULFq4#gs_ck4` z+db2o?ZQ0nZm97c%gEJtX&AAEt-5OFk}l(YFPQ~W;gvD>Z)yC+Sc{< z7Ay*W0*0`%>_g;&)Q8;Z&R0ly)pgprjVIgCzJH@heez5?h!C0dAsPV6kjxr%blYD8 zwMzj2qg(Q!@Lrh)^6GLHGi$REvbAn?=6I=ZHZAE>WVLSXPIO=C zolM%)->d*{V;DcA9s`zho9-|!<0`|Q189Hfk7*wC`&^VU{TRb?!_g)oB%o2?WVV>r z0xjk(h)JHQm>UE#O!Z_h5RAC!FM<(q5U$-U*&{s55d|cz*T{8&zpb4|^9tt06b`V+ zxh_8idQ4Ou z&5jGujD>f}!nWZBWYsbSMKI*TBLiwQmtfzuZUb7)K64Y(N+yvdZu(-=FrvOY+oel# zr$0q-RBzjg2~r`p3)v~LcC@+AdBjXX8fkWQ}+Q(q2 zUF&|wf2p(VYbHALZ$`8~-sU7SgZUfEVVX#V{?38GBRAg}2*(Xe6xg=;@Ibo1?@I1G z7I`F!iEH9C_GH8dDs%)K7!ZS{a>pU!tEUKP1xkZ>9l=meYhFe|R}<3?7oLm_J;pzo zx@DHyTrKjfV?F`tQvuDBzVW1uo#nL|1FIi5-8q#veS1qh?DT(p?yuka(?uD7h_Euu za&MNu5D-QsDS9Hb03;_PM0V}D+rUo+rnG{@xBF|zHL)n^TFDX(F+~R zK_7ee^u67i4!_+y)jjd})=zw*9UCyiTbCmsNXnRZV+xzx9G(@(=Z=T;=f!g#V4bz`cJ8JZEw=l+d2yk&dpotx?_t=qU;<hnG8+ACclaPFP8eFeP!axUx zg$$W_EesbwL=oDAq)o309Ez4gng)I{GV}=zWJ&v+0~&+;PjfK76`a1cy7h{G2`=95 z|HhbqO7q&+#R2}czvZ5nGfm-YQ+Wc0pY-P`CIbePVNGeIi9-OYC_d$J9CEZe##OS( zV=7TV!rOl`7_PTx(RcJ?UwI8*$_!fph73HKd|Ej>*^%r@o`M>s!xF6Pmb+|?tN!ys zK$V;zbJl-%Jfvw>Q*T>rd<8W2SNRG%H@eUnQK;Tn>->ff|Goa7oP*xKfva=Y$eNQB zdNlXR*OdVk@Uhlira*^ueX^gi?8G?&|JklLrw#$)Qh9F3c0B_w7 zm>h|h0k&7D+dBS0kOAE*Jsro#zs6BQ8RAR?|2No688=iPzGzgD#J6GRQ>GIUhfny@ z>lSFQTZC^(ms4;{mZvfY=l-Ey0=&-w<<925@%Yv*K2U&9{gwYKecadqNxtwQ{(h{F zMKh44tW=4QfN@OW%iS7o_V;@eoq$_t|PVhc3U^ zmw@I5MvwQ5G@EZw;G`*?NU7byrpG9*J17YI)8MC`t1L^#yY2WLGIH*G1vdB-f3Mn8 zfkT)C%GG^zev5yv=LPvf66il@yBrZ?AYR&n!73P~&oE#AZcmyyj{nULAA`-?eec(s z{`;NgU*ziq4rhA?UUnJgwXI$5og7{JSncZ`j+(5IK4Ul5x{g3K(zSEfdI=;5o+DV7 zoxhoHkx8rm2F_~9)@ZN%bz2_Y5;~Ag_||-ew+h{V0xT2MBPZtRVYej6ixtxb^Nr+=|w$QSW&vz z%3Nb>vJ&esMA6hw`ZSQ`K`od62_5Cp8DmK>?p@L4`nquHY?! zb3grM>FIbMYt6uAI5xW!R{#f)*8o5r1F0+ZU-QYom4fLAA5O-&!2362E}wa~DQV@U zPk#zR{1W)W37B;LMlWyLjgJ|y-E{aAU}&8k(ECXLj}^}Cp0=@TLS>7c4M;w{)g7Ed zAH$}ATIK}`Tf$Qwfgd`TxIq^J8n`Dc#4NuBi)#PdsgTSfhrDPaY{eQs|M&+_q5uDA z`7HpDJ17!t)rbbCGyw1)-m-e~Dqh_^)Z=FFWe=|WcrW|5BfvP^yV3hZhmU^8F1vO6 z-hh?2{pjafp^vSt{Z+Rh+9MYka^w{O^{C|&Hm+CnqHb6PD=xd`f%@yhM`wdFu7jek zxQpIodkP-(aHWteRT6r_1*e4{?Hnfpo~n_gY~|%}beh==XlnY7G3_x0F$*)-_4YIC zu3Br>k{u^`o$t*u7n7rVl}WR^ADfNS#qZ$S3G3y>Z5y_=^IYDF{2@XU)Se58(;DWs z?0ztOpgl#@A+|Dy!@y;Hx9$zF0^?2{yG_NgVx%%jBU-PCNP}!tDl3D&odl%`C3kr! z7p%k1Y5z0D+J>pF>4wV4Ze2r8WB1TY5B3_pssQc#@w@Z*1L(g+#5W#KV>ylCI4+te z!y+{vs_mLtxYD&|ID#O=OYFD03RyM8(xidjHQUd?KwH<)^7$hJB*Mez(;p0MN3E)P z@Hphq-E5;W+`ea@vIS3@@2-$2_?Me&o&&#a353#z>03*pjD>;4M5EB<(*NPv%E^e% z+i%M|5Q=U6v!ikf!mh7R?G~*X;9Us+&KkYak$f8D-ydchK4! zYEV&VhPi6c5DbUH&pQB4V5hb}=~%fq`kG1xJVeWfDA9T@YhhI#8AX8^!P0-9RaE?m z`>g+gtlXdh*>`zq3y)&fT$PFxwYl8n8M1c+H9NV>xjFil-^%1C_n!N&fG6zJatefY z`qsMmK=&mRz4!knNA$*pV89#tj7NTpltuMvp)c#1)~>Z>37dSnsEzs5T&(a?W-5z-&KB?{3JDv_6>V5tXCe*`dAYBn&PJ9Hgm6Pxf! zfPN07k4wI7cha4~N5_o1o_hb%*-{|KH+{U?@=d#wk2u+jrR|Gds6RxQAi%KQZ4&mT zCx}qvPD4w@fKf~Vd9J$1mqWSMt?#5YAX*CQKN3#g03~49F=z)81fAjBM$}GfuIJIU zuc!>~GlB$a*mg`O8T27(>z8984JabRHLKt;8z9-kNOk619R&8~Ja*+RGpa^zcYpW& zUspOmZ$S>~Z0|Sc(7_UvP32L+>(SxZJ? z0|YDdS7BviviJD@26M3dzLV!qRNQnJ2?^` zxLiMh6VR&UiEZznuI+d{wQ1LzKTsLHw>{k}pFa8XPQKAXJH0mVcqpmpdO!^L$lceZ zPhNjSnZQ+&vQ|r+bRC$&(&%=-;7y+r^O*Pu7a9Xv)ic7`U(tx-MQY?1(GB89#VsOb zA#GFt2@;4g2Uj?=oy_|LW!9(mht?}Ofg2-ThVfR|f9gE9vZ3ys;P ztNzOJ#GN(_NpfkB?xoH&G|z%O^1mW|+S92ks+`mC5{!Dc%4+k0=< zXT>=g`xYp?DDl0#-S50?jY8~yB#4%t_R4)KJ7)`B(*R)@!Y^Y+(nmdl8%xLF2bQJ3 z>{Ap3?cj&n*g^w{#%m!s$Z{NkL1ma3IH04Spx+SuTb_jRlI^C?G3kH01vlB9$rJn> zo+)cJN7K@!fAV(0Y?FqzNj5j-O(uOdKK4Q2anKw5J~#W@y-(Zhe$PJS~qx{1pCSdNoTD(fBy8`hAf`zZ+mQtGw{iA#zL~b;ux1WMFnk> z)uIh>`Dt3`1Zq@>Z{@du41o9*)Y$(1N#RcSc-_yu#Dt#OJd6vi4eB&&m%ndwwo{JL z2ZP|Yw$Jvo8G!$DJ{(7-k{7qh3~xF$*3G_{{TyJZaT{_DnB!%(EAf{_t2@u_6i9~l z{}@`=huJf`B|9gyyFMik2FpGsfUi!)0z^6~OaC(FET7r(%)GHpE?jJEvk?cZ`k=o* zD&E9rz5Sv7%rbgv^9H6)*S3!4;#A&r?o^uoH$>}@jeWzxOC2Y|&V&QeJoNZ7lH?u0 zz6^b1#vlg}XxLYbEry=}57Ro7XGa?-79dIUEjbE^-Ec3N^&P`^@oE1E)W5&8o8i+0 zuqE~OifjI-%L??rT(`;{)ZO}jga0qvZ^9BHhr}lgRMK{WN4L&U{?1(& z?84mk^IEyj%j@F;-2+X$jK13d&OsYs4( zz92_|FYcB3bZZ&3!5=O3b5$LSh;%B(a5Re)_~DFZs}n@Bg)Y3ZRsa*?DaF+G^c-?529Uq<2MdUW(E`fk-@f4gq(c z3x z9J@n~0DhoDK6V}u{04b4*F=^<)))+xdmJ*Jx;2jr&2^f@XW5)Ipe1yV1w7RR{-efM zFqpC2F-qVU!bj?`D-T#KAjevk(u29&7lok5quL$xROgUrx#1@6Iz@`1opCq0aRuLpCO1LQg> z{hfSy`>dsV_Yq2WRPp{>WXKOBPC9qOSEn{;cPhJ}UhD7V8CZAj^VW~H#s9R_GawTj z4*>%J5T*~p6{lvJPyiqb_-qjZqryT)A*n?T<~}Ma&nsr)BGM_r!9ef^Ltzr{^h~-; zAkR~#15yJogCj>4^*fLq)(q0l5W#`yC4j@Uy48t^BHDdncgFlp5OzY>==nLTdgH?` z!unfqb#hb*Ft+UqG?j?YR`xconf0Uf@1CGxCd}N*+;47?-ouO%ntrh1q=~Ft*uSy!k zINBCb^P*?NPNp9`y~?v4+Ks7V&DLfsduB&4_X^}LKO`(s5SUhF9mVe<9cJ>Ko4CY%gmiMb&~7@M-IyuR4@aM6X0YwCj6Ty zO#aK6N=L|nlU=S%Y9(

cc52UjDuO=)GMqaJt9qC%arM zFE*TdHG#E8=cbR#y+i{S{r8K`E#t0++x~W$@QIuGghl%Pa#4yQY-kklNK|ri$XWEh zed3ik2wt$SK&1G$9lP$Qn#$yfr7@x88J@tIKxT4{9%0Oh?Tzh5|2^qEpG4?RJZRp7 ziR{O_iGhCB-+&Y4U6%bMLnWi@HGDs<_sza`pxf_V_0{)$$6;siM)QXATAj_DNRWJ_ zJ71gmpY^}(E2->B0|E$}w}7*eW~cOSMz{nbuEžIq}yhWe=r=q3!6Jn0Y*f}|M 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 R4dnm;002ovPDHLkV1fdo>NNlW literal 0 HcmV?d00001 diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/lib/main.dart b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/lib/main.dart index 3144c2aff5e..7c2a272054d 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/lib/main.dart +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/lib/main.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:maps_example_dart/animate_camera.dart'; +import 'package:maps_example_dart/bitmap_registry.dart'; import 'package:maps_example_dart/clustering.dart'; import 'package:maps_example_dart/lite_mode.dart'; import 'package:maps_example_dart/map_click.dart'; @@ -43,5 +44,6 @@ void main() { TileOverlayPage(), ClusteringPage(), MapIdPage(), + BitmapRegistryPage(), ]))); } diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios15/assets/checkers.png b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios15/assets/checkers.png new file mode 100644 index 0000000000000000000000000000000000000000..444874d2279ee0368026350c0a99c33953a9c59a GIT binary patch literal 331719 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

cc52UjDuO=)GMqaJt9qC%arM zFE*TdHG#E8=cbR#y+i{S{r8K`E#t0++x~W$@QIuGghl%Pa#4yQY-kklNK|ri$XWEh zed3ik2wt$SK&1G$9lP$Qn#$yfr7@x88J@tIKxT4{9%0Oh?Tzh5|2^qEpG4?RJZRp7 ziR{O_iGhCB-+&Y4U6%bMLnWi@HGDs<_sza`pxf_V_0{)$$6;siM)QXATAj_DNRWJ_ zJ71gmpY^}(E2->B0|E$}w}7*eW~cOSMz{nbuEžIq}yhWe=r=q3!6Jn0Y*f}|M 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 R4dnm;002ovPDHLkV1fdo>NNlW literal 0 HcmV?d00001 diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios15/lib/main.dart b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios15/lib/main.dart index 3144c2aff5e..7c2a272054d 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios15/lib/main.dart +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios15/lib/main.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:maps_example_dart/animate_camera.dart'; +import 'package:maps_example_dart/bitmap_registry.dart'; import 'package:maps_example_dart/clustering.dart'; import 'package:maps_example_dart/lite_mode.dart'; import 'package:maps_example_dart/map_click.dart'; @@ -43,5 +44,6 @@ void main() { TileOverlayPage(), ClusteringPage(), MapIdPage(), + BitmapRegistryPage(), ]))); } diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/shared/maps_example_dart/lib/bitmap_registry.dart b/packages/google_maps_flutter/google_maps_flutter_ios/example/shared/maps_example_dart/lib/bitmap_registry.dart new file mode 100644 index 00000000000..75b35863b8f --- /dev/null +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/shared/maps_example_dart/lib/bitmap_registry.dart @@ -0,0 +1,136 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// ignore_for_file: public_member_api_docs + +import 'dart:math'; + +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; + +import 'example_google_map.dart'; +import 'page.dart'; + +class BitmapRegistryPage extends GoogleMapExampleAppPage { + const BitmapRegistryPage({Key? key}) + : super(const Icon(Icons.speed), 'Bitmap registry', key: key); + + @override + Widget build(BuildContext context) { + return const _BitmapRegistryBody(); + } +} + +// How many markers to place on the map. +const int _numberOfMarkers = 500; + +// The name of the bitmap to use for the markers. +const String _bitmapName = 'assets/checkers.png'; + +class _BitmapRegistryBody extends StatefulWidget { + const _BitmapRegistryBody(); + + @override + State<_BitmapRegistryBody> createState() => _BitmapRegistryBodyState(); +} + +class _BitmapRegistryBodyState extends State<_BitmapRegistryBody> { + final Set markers = {}; + + @override + Widget build(BuildContext context) { + return SingleChildScrollView( + child: Column( + children: [ + AspectRatio( + aspectRatio: 2 / 3, + child: ExampleGoogleMap( + markers: markers, + initialCameraPosition: const CameraPosition( + target: LatLng(0, 0), + zoom: 1.0, + ), + ), + ), + MaterialButton( + onPressed: _addMarkersWithoutRegistry, + child: const Text('Add $_numberOfMarkers markers, no registry'), + ), + MaterialButton( + onPressed: _addMarkersWithRegistry, + child: const Text('Add $_numberOfMarkers markers using registry'), + ), + ], + ), + ); + } + + /// Add markers to the map with a custom bitmap as the icon. + /// + /// To show potential performance issues: + /// * large original image is used (800x600px, ~330KB) + /// * bitmap is scaled down to 64x64px + /// * bitmap is created once and reused for all markers. This doesn't help + /// much because the bitmap is still sent to the platform side for each + /// marker. + /// + /// Adding many markers may result in a performance hit, out of memory errors + /// or even app crashes. + Future _addMarkersWithoutRegistry() async { + final ByteData byteData = await rootBundle.load(_bitmapName); + final Uint8List bytes = byteData.buffer.asUint8List(); + final BytesMapBitmap bitmap = BitmapDescriptor.bytes( + bytes, + width: 64, + height: 64, + ); + _updateMarkers(bitmap); + } + + /// Add markers to the map with a custom bitmap as the icon placed in the + /// bitmap registry beforehand. + /// + /// Similarly to [_addMarkersWithoutRegistry], this method uses the same + /// technique to show potential performance issues, however the bitmap is + /// registered in the bitmap registry before creating the markers. + Future _addMarkersWithRegistry() async { + final ByteData byteData = await rootBundle.load(_bitmapName); + final Uint8List bytes = byteData.buffer.asUint8List(); + final BytesMapBitmap bytesBitmap = BitmapDescriptor.bytes( + bytes, + width: 64, + height: 64, + ); + const int registeredBitmapId = 0; + await GoogleMapsFlutterPlatform.instance.registerBitmap(0, bytesBitmap); + const RegisteredMapBitmap registeredBitmap = + RegisteredMapBitmap(id: registeredBitmapId); + _updateMarkers(registeredBitmap); + } + + // Create a set of markers with the given bitmap and update the state with new + // markers. + void _updateMarkers(BitmapDescriptor bitmap) { + final List newMarkers = List.generate( + _numberOfMarkers, + (int id) { + return Marker( + markerId: MarkerId('$id'), + icon: bitmap, + position: LatLng( + Random().nextDouble() * 100 - 50, + Random().nextDouble() * 100 - 50, + ), + ); + }, + ); + + setState(() { + markers + ..clear() + ..addAll(newMarkers); + }); + } +} diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.h b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.h index 66e9e64c3a7..422ddb3738f 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.h +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.h @@ -26,7 +26,7 @@ NS_ASSUME_NONNULL_BEGIN + (UIImage *)iconFromBitmap:(FGMPlatformBitmap *)platformBitmap registrar:(NSObject *)registrar screenScale:(CGFloat)screenScale - imageRegistry:(ImageRegistry *)imageRegistry; + imageRegistry:(ImageRegistry *)imageRegistry; @end @interface FLTMarkersController : NSObject diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.m index 328aa444df0..298ee850051 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.m @@ -114,10 +114,10 @@ - (void)updateFromPlatformMarker:(FGMPlatformMarker *)platformMarker [self setAlpha:platformMarker.alpha]; [self setAnchor:FGMGetCGPointForPigeonPoint(platformMarker.anchor)]; [self setDraggable:platformMarker.draggable]; - UIImage *image = [FLTGoogleMapMarkerController iconFromBitmap:platformMarker.icon - registrar:registrar - screenScale:screenScale - imageRegistry:imageRegistry]; + UIImage *image = [FLTGoogleMapMarkerController iconFromBitmap:platformMarker.icon + registrar:registrar + screenScale:screenScale + imageRegistry:imageRegistry]; [self setIcon:image]; [self setFlat:platformMarker.flat]; [self setConsumeTapEvents:platformMarker.consumeTapEvents]; @@ -155,7 +155,7 @@ + (UIImage *)iconFromBitmap:(FGMPlatformBitmap *)platformBitmap FGMPlatformBitmapRegisteredMapBitmap *registeredBitmap = bitmap; NSInteger imageId = registeredBitmap.id; NSNumber *imageIdNumber = [NSNumber numberWithInteger:imageId]; - return [imageRegistry getBitmap:imageIdNumber]; + image = [imageRegistry getBitmap:imageIdNumber]; } else if ([bitmap isKindOfClass:[FGMPlatformBitmapDefaultMarker class]]) { FGMPlatformBitmapDefaultMarker *bitmapDefaultMarker = bitmap; CGFloat hue = bitmapDefaultMarker.hue.doubleValue; From 774ffae8efe34f8b6cc79c12a08adee0da77d177 Mon Sep 17 00:00:00 2001 From: Alexander Troshkov <20989940+aednlaxer@users.noreply.github.com> Date: Mon, 3 Feb 2025 13:19:02 +0200 Subject: [PATCH 03/18] Initialize ImageRegistry in FLTGoogleMapsPlugin.m --- .../ios/Classes/FLTGoogleMapsPlugin.m | 5 ++++- .../ios/Classes/GoogleMapController.h | 7 +++++-- .../ios/Classes/GoogleMapController.m | 13 ++++++++----- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.m index 70bde9022a0..dd7e5cb1a0a 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.m @@ -9,7 +9,10 @@ @implementation FLTGoogleMapsPlugin + (void)registerWithRegistrar:(NSObject *)registrar { - FLTGoogleMapFactory *googleMapFactory = [[FLTGoogleMapFactory alloc] initWithRegistrar:registrar]; + ImageRegistry *imageRegistry = [[ImageRegistry alloc] initWithRegistrar:registrar]; + SetUpFGMImageRegistryApi(registrar.messenger, imageRegistry); + FLTGoogleMapFactory *googleMapFactory = [[FLTGoogleMapFactory alloc] initWithRegistrar:registrar + imageRegistry:imageRegistry]; [registrar registerViewFactory:googleMapFactory withId:@"plugins.flutter.dev/google_maps_ios" gestureRecognizersBlockingPolicy: diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.h b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.h index a2b75d74c75..157e1b25d06 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.h +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.h @@ -11,6 +11,7 @@ #import "GoogleMapPolygonController.h" #import "GoogleMapPolylineController.h" #import "messages.g.h" +#import "ImageRegistry.h" NS_ASSUME_NONNULL_BEGIN @@ -19,7 +20,8 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithFrame:(CGRect)frame viewIdentifier:(int64_t)viewId creationParameters:(FGMPlatformMapViewCreationParams *)creationParameters - registrar:(NSObject *)registrar; + registrar:(NSObject *)registrar + imageRegistry:(ImageRegistry *)imageRegistry; - (void)showAtOrigin:(CGPoint)origin; - (void)hide; - (nullable GMSCameraPosition *)cameraPosition; @@ -27,7 +29,8 @@ NS_ASSUME_NONNULL_BEGIN // Allows the engine to create new Google Map instances. @interface FLTGoogleMapFactory : NSObject -- (instancetype)initWithRegistrar:(NSObject *)registrar; +- (instancetype)initWithRegistrar:(NSObject *)registrar + imageRegistry:(ImageRegistry *)imageRegistry; @end NS_ASSUME_NONNULL_END diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.m index fcf46132958..22f596ac161 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.m @@ -18,6 +18,7 @@ @interface FLTGoogleMapFactory () @property(weak, nonatomic) NSObject *registrar; +@property(weak, nonatomic) ImageRegistry *imageRegistry; @property(strong, nonatomic, readonly) id sharedMapServices; @end @@ -26,10 +27,12 @@ @implementation FLTGoogleMapFactory @synthesize sharedMapServices = _sharedMapServices; -- (instancetype)initWithRegistrar:(NSObject *)registrar { +- (instancetype)initWithRegistrar:(NSObject *)registrar + imageRegistry:(ImageRegistry *)imageRegistry { self = [super init]; if (self) { _registrar = registrar; + _imageRegistry = imageRegistry; } return self; } @@ -48,7 +51,8 @@ - (instancetype)initWithRegistrar:(NSObject *)registrar return [[FLTGoogleMapController alloc] initWithFrame:frame viewIdentifier:viewId creationParameters:args - registrar:self.registrar]; + registrar:self.registrar + imageRegistry:self.imageRegistry]; } - (id)sharedMapServices { @@ -147,7 +151,8 @@ @implementation FLTGoogleMapController - (instancetype)initWithFrame:(CGRect)frame viewIdentifier:(int64_t)viewId creationParameters:(FGMPlatformMapViewCreationParams *)creationParameters - registrar:(NSObject *)registrar { + registrar:(NSObject *)registrar + imageRegistry:(ImageRegistry *)imageRegistry { GMSCameraPosition *camera = FGMGetCameraPositionForPigeonCameraPosition(creationParameters.initialCameraPosition); @@ -160,7 +165,6 @@ - (instancetype)initWithFrame:(CGRect)frame } GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options]; - ImageRegistry *imageRegistry = [[ImageRegistry alloc] initWithRegistrar:registrar]; return [self initWithMapView:mapView viewIdentifier:viewId @@ -226,7 +230,6 @@ - (instancetype)initWithMapView:(GMSMapView *_Nonnull)mapView messenger:registrar.messenger pigeonSuffix:pigeonSuffix]; SetUpFGMMapsApiWithSuffix(registrar.messenger, _callHandler, pigeonSuffix); - SetUpFGMImageRegistryApi(registrar.messenger, imageRegistry); _inspector = [[FGMMapInspector alloc] initWithMapController:self messenger:registrar.messenger pigeonSuffix:pigeonSuffix]; From 140dbb249971f9443e2083e8423f5b5bb3e56024 Mon Sep 17 00:00:00 2001 From: Alexander Troshkov <20989940+aednlaxer@users.noreply.github.com> Date: Mon, 3 Feb 2025 13:38:21 +0200 Subject: [PATCH 04/18] Update BitmapRegistry example --- .../example/lib/bitmap_registry.dart | 127 +++++++++++------- .../example/lib/bitmap_registry.dart | 127 +++++++++++------- .../lib/bitmap_registry.dart | 127 +++++++++++------- 3 files changed, 240 insertions(+), 141 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter/example/lib/bitmap_registry.dart b/packages/google_maps_flutter/google_maps_flutter/example/lib/bitmap_registry.dart index 79955d23177..32f6eff1f42 100644 --- a/packages/google_maps_flutter/google_maps_flutter/example/lib/bitmap_registry.dart +++ b/packages/google_maps_flutter/google_maps_flutter/example/lib/bitmap_registry.dart @@ -26,9 +26,6 @@ class BitmapRegistryPage extends GoogleMapExampleAppPage { // How many markers to place on the map. const int _numberOfMarkers = 500; -// The name of the bitmap to use for the markers. -const String _bitmapName = 'assets/checkers.png'; - class _BitmapRegistryBody extends StatefulWidget { const _BitmapRegistryBody(); @@ -37,7 +34,21 @@ class _BitmapRegistryBody extends StatefulWidget { } class _BitmapRegistryBodyState extends State<_BitmapRegistryBody> { - final Set markers = {}; + final Set _markers = {}; + int? _registeredBitmapId; + + @override + void initState() { + super.initState(); + + _registerBitmap(); + } + + @override + void dispose() { + _unregisterBitmap(); + super.dispose(); + } @override Widget build(BuildContext context) { @@ -47,7 +58,7 @@ class _BitmapRegistryBodyState extends State<_BitmapRegistryBody> { AspectRatio( aspectRatio: 2 / 3, child: GoogleMap( - markers: markers, + markers: _markers, initialCameraPosition: const CameraPosition( target: LatLng(0, 0), zoom: 1.0, @@ -55,11 +66,33 @@ class _BitmapRegistryBodyState extends State<_BitmapRegistryBody> { ), ), MaterialButton( - onPressed: _addMarkersWithoutRegistry, + onPressed: () async { + // Add markers to the map with a custom bitmap as the icon. + // + // To show potential performance issues: + // * large original image is used (800x600px, ~330KB) + // * bitmap is scaled down to 64x64px + // * bitmap is created once and reused for all markers. This + // doesn't help much because the bitmap is still sent to the + // platform side for each marker. + // + // Adding many markers may result in a performance hit, + // out of memory errors or even app crashes. + final BytesMapBitmap bitmap = await _getAssetBitmapDescriptor(); + _updateMarkers(bitmap); + }, child: const Text('Add $_numberOfMarkers markers, no registry'), ), MaterialButton( - onPressed: _addMarkersWithRegistry, + onPressed: _registeredBitmapId == null + ? null + : () { + // Add markers to the map with a custom bitmap as the icon + // placed in the bitmap registry beforehand. + final RegisteredMapBitmap registeredBitmap = + RegisteredMapBitmap(id: _registeredBitmapId!); + _updateMarkers(registeredBitmap); + }, child: const Text('Add $_numberOfMarkers markers using registry'), ), ], @@ -67,47 +100,36 @@ class _BitmapRegistryBodyState extends State<_BitmapRegistryBody> { ); } - /// Add markers to the map with a custom bitmap as the icon. - /// - /// To show potential performance issues: - /// * large original image is used (800x600px, ~330KB) - /// * bitmap is scaled down to 64x64px - /// * bitmap is created once and reused for all markers. This doesn't help - /// much because the bitmap is still sent to the platform side for each - /// marker. - /// - /// Adding many markers may result in a performance hit, out of memory errors - /// or even app crashes. - Future _addMarkersWithoutRegistry() async { - final ByteData byteData = await rootBundle.load(_bitmapName); - final Uint8List bytes = byteData.buffer.asUint8List(); - final BytesMapBitmap bitmap = BitmapDescriptor.bytes( - bytes, - width: 64, - height: 64, - ); - _updateMarkers(bitmap); - } + /// Register a bitmap in the bitmap registry. + Future _registerBitmap() async { + if (_registeredBitmapId != null) { + return; + } - /// Add markers to the map with a custom bitmap as the icon placed in the - /// bitmap registry beforehand. - /// - /// Similarly to [_addMarkersWithoutRegistry], this method uses the same - /// technique to show potential performance issues, however the bitmap is - /// registered in the bitmap registry before creating the markers. - Future _addMarkersWithRegistry() async { - final ByteData byteData = await rootBundle.load(_bitmapName); - final Uint8List bytes = byteData.buffer.asUint8List(); - final BytesMapBitmap bytesBitmap = BitmapDescriptor.bytes( - bytes, - width: 64, - height: 64, - ); + final BytesMapBitmap bitmap = await _getAssetBitmapDescriptor(); final int registeredBitmapId = - await GoogleMapBitmapRegistry.instance.register(bytesBitmap); - final RegisteredMapBitmap registeredBitmap = - RegisteredMapBitmap(id: registeredBitmapId); - _updateMarkers(registeredBitmap); + await GoogleMapBitmapRegistry.instance.register(bitmap); + + // If the widget was disposed before the bitmap was registered, unregister + // the bitmap. + if (!mounted) { + _unregisterBitmap(); + return; + } + + setState(() { + _registeredBitmapId = registeredBitmapId; + }); + } + + /// Unregister the bitmap from the bitmap registry. + void _unregisterBitmap() { + if (_registeredBitmapId == null) { + return; + } + + GoogleMapBitmapRegistry.instance.unregister(_registeredBitmapId!); + _registeredBitmapId = null; } // Create a set of markers with the given bitmap and update the state with new @@ -128,9 +150,20 @@ class _BitmapRegistryBodyState extends State<_BitmapRegistryBody> { ); setState(() { - markers + _markers ..clear() ..addAll(newMarkers); }); } + + /// Load a bitmap from an asset and create a scaled [BytesMapBitmap] from it. + Future _getAssetBitmapDescriptor() async { + final ByteData byteData = await rootBundle.load('assets/checkers.png'); + final Uint8List bytes = byteData.buffer.asUint8List(); + return BitmapDescriptor.bytes( + bytes, + width: 64, + height: 64, + ); + } } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/lib/bitmap_registry.dart b/packages/google_maps_flutter/google_maps_flutter_android/example/lib/bitmap_registry.dart index 75b35863b8f..aebf78fbf47 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/example/lib/bitmap_registry.dart +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/lib/bitmap_registry.dart @@ -26,9 +26,6 @@ class BitmapRegistryPage extends GoogleMapExampleAppPage { // How many markers to place on the map. const int _numberOfMarkers = 500; -// The name of the bitmap to use for the markers. -const String _bitmapName = 'assets/checkers.png'; - class _BitmapRegistryBody extends StatefulWidget { const _BitmapRegistryBody(); @@ -37,7 +34,21 @@ class _BitmapRegistryBody extends StatefulWidget { } class _BitmapRegistryBodyState extends State<_BitmapRegistryBody> { - final Set markers = {}; + final Set _markers = {}; + int? _registeredBitmapId; + + @override + void initState() { + super.initState(); + + _registerBitmap(); + } + + @override + void dispose() { + _unregisterBitmap(); + super.dispose(); + } @override Widget build(BuildContext context) { @@ -47,7 +58,7 @@ class _BitmapRegistryBodyState extends State<_BitmapRegistryBody> { AspectRatio( aspectRatio: 2 / 3, child: ExampleGoogleMap( - markers: markers, + markers: _markers, initialCameraPosition: const CameraPosition( target: LatLng(0, 0), zoom: 1.0, @@ -55,11 +66,33 @@ class _BitmapRegistryBodyState extends State<_BitmapRegistryBody> { ), ), MaterialButton( - onPressed: _addMarkersWithoutRegistry, + onPressed: () async { + // Add markers to the map with a custom bitmap as the icon. + // + // To show potential performance issues: + // * large original image is used (800x600px, ~330KB) + // * bitmap is scaled down to 64x64px + // * bitmap is created once and reused for all markers. This + // doesn't help much because the bitmap is still sent to the + // platform side for each marker. + // + // Adding many markers may result in a performance hit, + // out of memory errors or even app crashes. + final BytesMapBitmap bitmap = await _getAssetBitmapDescriptor(); + _updateMarkers(bitmap); + }, child: const Text('Add $_numberOfMarkers markers, no registry'), ), MaterialButton( - onPressed: _addMarkersWithRegistry, + onPressed: _registeredBitmapId == null + ? null + : () { + // Add markers to the map with a custom bitmap as the icon + // placed in the bitmap registry beforehand. + final RegisteredMapBitmap registeredBitmap = + RegisteredMapBitmap(id: _registeredBitmapId!); + _updateMarkers(registeredBitmap); + }, child: const Text('Add $_numberOfMarkers markers using registry'), ), ], @@ -67,47 +100,36 @@ class _BitmapRegistryBodyState extends State<_BitmapRegistryBody> { ); } - /// Add markers to the map with a custom bitmap as the icon. - /// - /// To show potential performance issues: - /// * large original image is used (800x600px, ~330KB) - /// * bitmap is scaled down to 64x64px - /// * bitmap is created once and reused for all markers. This doesn't help - /// much because the bitmap is still sent to the platform side for each - /// marker. - /// - /// Adding many markers may result in a performance hit, out of memory errors - /// or even app crashes. - Future _addMarkersWithoutRegistry() async { - final ByteData byteData = await rootBundle.load(_bitmapName); - final Uint8List bytes = byteData.buffer.asUint8List(); - final BytesMapBitmap bitmap = BitmapDescriptor.bytes( - bytes, - width: 64, - height: 64, - ); - _updateMarkers(bitmap); + /// Register a bitmap in the bitmap registry. + Future _registerBitmap() async { + if (_registeredBitmapId != null) { + return; + } + + final BytesMapBitmap bitmap = await _getAssetBitmapDescriptor(); + const int registeredBitmapId = 1; + await GoogleMapsFlutterPlatform.instance.registerBitmap(1, bitmap); + + // If the widget was disposed before the bitmap was registered, unregister + // the bitmap. + if (!mounted) { + _unregisterBitmap(); + return; + } + + setState(() { + _registeredBitmapId = registeredBitmapId; + }); } - /// Add markers to the map with a custom bitmap as the icon placed in the - /// bitmap registry beforehand. - /// - /// Similarly to [_addMarkersWithoutRegistry], this method uses the same - /// technique to show potential performance issues, however the bitmap is - /// registered in the bitmap registry before creating the markers. - Future _addMarkersWithRegistry() async { - final ByteData byteData = await rootBundle.load(_bitmapName); - final Uint8List bytes = byteData.buffer.asUint8List(); - final BytesMapBitmap bytesBitmap = BitmapDescriptor.bytes( - bytes, - width: 64, - height: 64, - ); - const int registeredBitmapId = 0; - await GoogleMapsFlutterPlatform.instance.registerBitmap(0, bytesBitmap); - const RegisteredMapBitmap registeredBitmap = - RegisteredMapBitmap(id: registeredBitmapId); - _updateMarkers(registeredBitmap); + /// Unregister the bitmap from the bitmap registry. + void _unregisterBitmap() { + if (_registeredBitmapId == null) { + return; + } + + GoogleMapsFlutterPlatform.instance.unregisterBitmap(_registeredBitmapId!); + _registeredBitmapId = null; } // Create a set of markers with the given bitmap and update the state with new @@ -128,9 +150,20 @@ class _BitmapRegistryBodyState extends State<_BitmapRegistryBody> { ); setState(() { - markers + _markers ..clear() ..addAll(newMarkers); }); } + + /// Load a bitmap from an asset and create a scaled [BytesMapBitmap] from it. + Future _getAssetBitmapDescriptor() async { + final ByteData byteData = await rootBundle.load('assets/checkers.png'); + final Uint8List bytes = byteData.buffer.asUint8List(); + return BitmapDescriptor.bytes( + bytes, + width: 64, + height: 64, + ); + } } diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/shared/maps_example_dart/lib/bitmap_registry.dart b/packages/google_maps_flutter/google_maps_flutter_ios/example/shared/maps_example_dart/lib/bitmap_registry.dart index 75b35863b8f..aebf78fbf47 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/shared/maps_example_dart/lib/bitmap_registry.dart +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/shared/maps_example_dart/lib/bitmap_registry.dart @@ -26,9 +26,6 @@ class BitmapRegistryPage extends GoogleMapExampleAppPage { // How many markers to place on the map. const int _numberOfMarkers = 500; -// The name of the bitmap to use for the markers. -const String _bitmapName = 'assets/checkers.png'; - class _BitmapRegistryBody extends StatefulWidget { const _BitmapRegistryBody(); @@ -37,7 +34,21 @@ class _BitmapRegistryBody extends StatefulWidget { } class _BitmapRegistryBodyState extends State<_BitmapRegistryBody> { - final Set markers = {}; + final Set _markers = {}; + int? _registeredBitmapId; + + @override + void initState() { + super.initState(); + + _registerBitmap(); + } + + @override + void dispose() { + _unregisterBitmap(); + super.dispose(); + } @override Widget build(BuildContext context) { @@ -47,7 +58,7 @@ class _BitmapRegistryBodyState extends State<_BitmapRegistryBody> { AspectRatio( aspectRatio: 2 / 3, child: ExampleGoogleMap( - markers: markers, + markers: _markers, initialCameraPosition: const CameraPosition( target: LatLng(0, 0), zoom: 1.0, @@ -55,11 +66,33 @@ class _BitmapRegistryBodyState extends State<_BitmapRegistryBody> { ), ), MaterialButton( - onPressed: _addMarkersWithoutRegistry, + onPressed: () async { + // Add markers to the map with a custom bitmap as the icon. + // + // To show potential performance issues: + // * large original image is used (800x600px, ~330KB) + // * bitmap is scaled down to 64x64px + // * bitmap is created once and reused for all markers. This + // doesn't help much because the bitmap is still sent to the + // platform side for each marker. + // + // Adding many markers may result in a performance hit, + // out of memory errors or even app crashes. + final BytesMapBitmap bitmap = await _getAssetBitmapDescriptor(); + _updateMarkers(bitmap); + }, child: const Text('Add $_numberOfMarkers markers, no registry'), ), MaterialButton( - onPressed: _addMarkersWithRegistry, + onPressed: _registeredBitmapId == null + ? null + : () { + // Add markers to the map with a custom bitmap as the icon + // placed in the bitmap registry beforehand. + final RegisteredMapBitmap registeredBitmap = + RegisteredMapBitmap(id: _registeredBitmapId!); + _updateMarkers(registeredBitmap); + }, child: const Text('Add $_numberOfMarkers markers using registry'), ), ], @@ -67,47 +100,36 @@ class _BitmapRegistryBodyState extends State<_BitmapRegistryBody> { ); } - /// Add markers to the map with a custom bitmap as the icon. - /// - /// To show potential performance issues: - /// * large original image is used (800x600px, ~330KB) - /// * bitmap is scaled down to 64x64px - /// * bitmap is created once and reused for all markers. This doesn't help - /// much because the bitmap is still sent to the platform side for each - /// marker. - /// - /// Adding many markers may result in a performance hit, out of memory errors - /// or even app crashes. - Future _addMarkersWithoutRegistry() async { - final ByteData byteData = await rootBundle.load(_bitmapName); - final Uint8List bytes = byteData.buffer.asUint8List(); - final BytesMapBitmap bitmap = BitmapDescriptor.bytes( - bytes, - width: 64, - height: 64, - ); - _updateMarkers(bitmap); + /// Register a bitmap in the bitmap registry. + Future _registerBitmap() async { + if (_registeredBitmapId != null) { + return; + } + + final BytesMapBitmap bitmap = await _getAssetBitmapDescriptor(); + const int registeredBitmapId = 1; + await GoogleMapsFlutterPlatform.instance.registerBitmap(1, bitmap); + + // If the widget was disposed before the bitmap was registered, unregister + // the bitmap. + if (!mounted) { + _unregisterBitmap(); + return; + } + + setState(() { + _registeredBitmapId = registeredBitmapId; + }); } - /// Add markers to the map with a custom bitmap as the icon placed in the - /// bitmap registry beforehand. - /// - /// Similarly to [_addMarkersWithoutRegistry], this method uses the same - /// technique to show potential performance issues, however the bitmap is - /// registered in the bitmap registry before creating the markers. - Future _addMarkersWithRegistry() async { - final ByteData byteData = await rootBundle.load(_bitmapName); - final Uint8List bytes = byteData.buffer.asUint8List(); - final BytesMapBitmap bytesBitmap = BitmapDescriptor.bytes( - bytes, - width: 64, - height: 64, - ); - const int registeredBitmapId = 0; - await GoogleMapsFlutterPlatform.instance.registerBitmap(0, bytesBitmap); - const RegisteredMapBitmap registeredBitmap = - RegisteredMapBitmap(id: registeredBitmapId); - _updateMarkers(registeredBitmap); + /// Unregister the bitmap from the bitmap registry. + void _unregisterBitmap() { + if (_registeredBitmapId == null) { + return; + } + + GoogleMapsFlutterPlatform.instance.unregisterBitmap(_registeredBitmapId!); + _registeredBitmapId = null; } // Create a set of markers with the given bitmap and update the state with new @@ -128,9 +150,20 @@ class _BitmapRegistryBodyState extends State<_BitmapRegistryBody> { ); setState(() { - markers + _markers ..clear() ..addAll(newMarkers); }); } + + /// Load a bitmap from an asset and create a scaled [BytesMapBitmap] from it. + Future _getAssetBitmapDescriptor() async { + final ByteData byteData = await rootBundle.load('assets/checkers.png'); + final Uint8List bytes = byteData.buffer.asUint8List(); + return BitmapDescriptor.bytes( + bytes, + width: 64, + height: 64, + ); + } } From 94fbf0ceae9a41f1cdbed8a25f57ac02b8e1b83a Mon Sep 17 00:00:00 2001 From: Alexander Troshkov <20989940+aednlaxer@users.noreply.github.com> Date: Mon, 3 Feb 2025 14:15:20 +0200 Subject: [PATCH 05/18] Rename ImageRegistry to FGMImageRegistry on iOS --- .../Classes/{ImageRegistry.h => FGMImageRegistry.h} | 2 +- .../Classes/{ImageRegistry.m => FGMImageRegistry.m} | 10 +++++++--- .../ios/Classes/FLTGoogleMapsPlugin.h | 2 +- .../ios/Classes/FLTGoogleMapsPlugin.m | 2 +- .../ios/Classes/GoogleMapController.h | 6 +++--- .../ios/Classes/GoogleMapController.m | 10 +++++----- .../ios/Classes/GoogleMapMarkerController.h | 6 +++--- .../ios/Classes/GoogleMapMarkerController.m | 10 +++++----- 8 files changed, 26 insertions(+), 22 deletions(-) rename packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/{ImageRegistry.h => FGMImageRegistry.h} (87%) rename packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/{ImageRegistry.m => FGMImageRegistry.m} (88%) diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/ImageRegistry.h b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.h similarity index 87% rename from packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/ImageRegistry.h rename to packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.h index 14abfa0e410..78bdaea55b5 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/ImageRegistry.h +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.h @@ -7,7 +7,7 @@ #import "messages.g.h" -@interface ImageRegistry : NSObject +@interface FGMImageRegistry : NSObject - (instancetype)init; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/ImageRegistry.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.m similarity index 88% rename from packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/ImageRegistry.m rename to packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.m index 9a21f302d8c..6c0da6abfc2 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/ImageRegistry.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.m @@ -2,17 +2,17 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ImageRegistry.h" +#import "FGMImageRegistry.h" #import "GoogleMapMarkerController.h" -@interface ImageRegistry () +@interface FGMImageRegistry () @property (nonatomic, strong) NSMutableDictionary *registry; @property(weak, nonatomic) NSObject *registrar; @end -@implementation ImageRegistry +@implementation FGMImageRegistry - (instancetype)initWithRegistrar:(NSObject *)registrar { self = [super init]; @@ -28,6 +28,7 @@ - (instancetype)init { } - (void)addBitmapToCacheId:(NSInteger)id bitmap:(nonnull FGMPlatformBitmap *)bitmap error:(FlutterError * _Nullable __autoreleasing * _Nonnull)error { + NSLog(@"PUT BITMAP"); CGFloat screenScale = [[UIScreen mainScreen] scale]; UIImage *image = [FLTGoogleMapMarkerController iconFromBitmap:bitmap registrar:_registrar @@ -38,15 +39,18 @@ - (void)addBitmapToCacheId:(NSInteger)id bitmap:(nonnull FGMPlatformBitmap *)bit } - (void)removeBitmapFromCacheId:(NSInteger)id error:(FlutterError * _Nullable __autoreleasing * _Nonnull)error { + NSLog(@"REMOBE BITMAP"); NSNumber *idNumber = [NSNumber numberWithInteger:id]; [self.registry removeObjectForKey:idNumber]; } - (void)clearBitmapCacheWithError:(FlutterError * _Nullable __autoreleasing * _Nonnull)error { + NSLog(@"CLEAR BITMAP"); [self.registry removeAllObjects]; } - (UIImage *)getBitmap:(NSNumber *)identifier { +// NSLog(@"get BITMAP %@", identifier); return self.registry[identifier]; } diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.h b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.h index 6bb5593aa40..7bf7cf4f234 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.h +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.h @@ -11,7 +11,7 @@ #import "GoogleMapMarkerController.h" #import "GoogleMapPolygonController.h" #import "GoogleMapPolylineController.h" -#import "ImageRegistry.h" +#import "FGMImageRegistry.h" NS_ASSUME_NONNULL_BEGIN diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.m index dd7e5cb1a0a..53bd8c0cbe3 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.m @@ -9,7 +9,7 @@ @implementation FLTGoogleMapsPlugin + (void)registerWithRegistrar:(NSObject *)registrar { - ImageRegistry *imageRegistry = [[ImageRegistry alloc] initWithRegistrar:registrar]; + FGMImageRegistry *imageRegistry = [[FGMImageRegistry alloc] initWithRegistrar:registrar]; SetUpFGMImageRegistryApi(registrar.messenger, imageRegistry); FLTGoogleMapFactory *googleMapFactory = [[FLTGoogleMapFactory alloc] initWithRegistrar:registrar imageRegistry:imageRegistry]; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.h b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.h index 157e1b25d06..f930daef688 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.h +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.h @@ -11,7 +11,7 @@ #import "GoogleMapPolygonController.h" #import "GoogleMapPolylineController.h" #import "messages.g.h" -#import "ImageRegistry.h" +#import "FGMImageRegistry.h" NS_ASSUME_NONNULL_BEGIN @@ -21,7 +21,7 @@ NS_ASSUME_NONNULL_BEGIN viewIdentifier:(int64_t)viewId creationParameters:(FGMPlatformMapViewCreationParams *)creationParameters registrar:(NSObject *)registrar - imageRegistry:(ImageRegistry *)imageRegistry; + imageRegistry:(FGMImageRegistry *)imageRegistry; - (void)showAtOrigin:(CGPoint)origin; - (void)hide; - (nullable GMSCameraPosition *)cameraPosition; @@ -30,7 +30,7 @@ NS_ASSUME_NONNULL_BEGIN // Allows the engine to create new Google Map instances. @interface FLTGoogleMapFactory : NSObject - (instancetype)initWithRegistrar:(NSObject *)registrar - imageRegistry:(ImageRegistry *)imageRegistry; + imageRegistry:(FGMImageRegistry *)imageRegistry; @end NS_ASSUME_NONNULL_END diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.m index 22f596ac161..5e2dc618630 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.m @@ -11,14 +11,14 @@ #import "FLTGoogleMapJSONConversions.h" #import "FLTGoogleMapTileOverlayController.h" #import "messages.g.h" -#import "ImageRegistry.h" +#import "FGMImageRegistry.h" #pragma mark - Conversion of JSON-like values sent via platform channels. Forward declarations. @interface FLTGoogleMapFactory () @property(weak, nonatomic) NSObject *registrar; -@property(weak, nonatomic) ImageRegistry *imageRegistry; +@property(weak, nonatomic) FGMImageRegistry *imageRegistry; @property(strong, nonatomic, readonly) id sharedMapServices; @end @@ -28,7 +28,7 @@ @implementation FLTGoogleMapFactory @synthesize sharedMapServices = _sharedMapServices; - (instancetype)initWithRegistrar:(NSObject *)registrar - imageRegistry:(ImageRegistry *)imageRegistry { + imageRegistry:(FGMImageRegistry *)imageRegistry { self = [super init]; if (self) { _registrar = registrar; @@ -152,7 +152,7 @@ - (instancetype)initWithFrame:(CGRect)frame viewIdentifier:(int64_t)viewId creationParameters:(FGMPlatformMapViewCreationParams *)creationParameters registrar:(NSObject *)registrar - imageRegistry:(ImageRegistry *)imageRegistry { + imageRegistry:(FGMImageRegistry *)imageRegistry { GMSCameraPosition *camera = FGMGetCameraPositionForPigeonCameraPosition(creationParameters.initialCameraPosition); @@ -177,7 +177,7 @@ - (instancetype)initWithMapView:(GMSMapView *_Nonnull)mapView viewIdentifier:(int64_t)viewId creationParameters:(FGMPlatformMapViewCreationParams *)creationParameters registrar:(NSObject *_Nonnull)registrar - imageRegistry:(ImageRegistry *)imageRegistry { + imageRegistry:(FGMImageRegistry *)imageRegistry { if (self = [super init]) { _mapView = mapView; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.h b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.h index 422ddb3738f..2887903f066 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.h +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.h @@ -8,7 +8,7 @@ #import "FGMClusterManagersController.h" #import "GoogleMapController.h" #import "messages.g.h" -#import "ImageRegistry.h" +#import "FGMImageRegistry.h" NS_ASSUME_NONNULL_BEGIN @@ -26,7 +26,7 @@ NS_ASSUME_NONNULL_BEGIN + (UIImage *)iconFromBitmap:(FGMPlatformBitmap *)platformBitmap registrar:(NSObject *)registrar screenScale:(CGFloat)screenScale - imageRegistry:(ImageRegistry *)imageRegistry; + imageRegistry:(FGMImageRegistry *)imageRegistry; @end @interface FLTMarkersController : NSObject @@ -34,7 +34,7 @@ NS_ASSUME_NONNULL_BEGIN callbackHandler:(FGMMapsCallbackApi *)callbackHandler clusterManagersController:(nullable FGMClusterManagersController *)clusterManagersController registrar:(NSObject *)registrar - imageRegistry:(ImageRegistry *)imageRegistry; + imageRegistry:(FGMImageRegistry *)imageRegistry; - (void)addMarkers:(NSArray *)markersToAdd; - (void)changeMarkers:(NSArray *)markersToChange; - (void)removeMarkersWithIdentifiers:(NSArray *)identifiers; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.m index 298ee850051..3225d27bd8d 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.m @@ -6,7 +6,7 @@ #import "FGMMarkerUserData.h" #import "FLTGoogleMapJSONConversions.h" -#import "ImageRegistry.h" +#import "FGMImageRegistry.h" @interface FLTGoogleMapMarkerController () @@ -110,7 +110,7 @@ - (void)setZIndex:(int)zIndex { - (void)updateFromPlatformMarker:(FGMPlatformMarker *)platformMarker registrar:(NSObject *)registrar screenScale:(CGFloat)screenScale - imageRegistry:(ImageRegistry *)imageRegistry { + imageRegistry:(FGMImageRegistry *)imageRegistry { [self setAlpha:platformMarker.alpha]; [self setAnchor:FGMGetCGPointForPigeonPoint(platformMarker.anchor)]; [self setDraggable:platformMarker.draggable]; @@ -145,7 +145,7 @@ - (void)interpretInfoWindow:(NSDictionary *)data { + (UIImage *)iconFromBitmap:(FGMPlatformBitmap *)platformBitmap registrar:(NSObject *)registrar screenScale:(CGFloat)screenScale - imageRegistry:(ImageRegistry *)imageRegistry { + imageRegistry:(FGMImageRegistry *)imageRegistry { NSAssert(screenScale > 0, @"Screen scale must be greater than 0"); // See comment in messages.dart for why this is so loosely typed. See also // https://github.com/flutter/flutter/issues/117819. @@ -388,7 +388,7 @@ @interface FLTMarkersController () /// Controller for adding/removing/fetching cluster managers @property(weak, nonatomic, nullable) FGMClusterManagersController *clusterManagersController; @property(weak, nonatomic) NSObject *registrar; -@property(copy, nonatomic) ImageRegistry *imageRegistry; +@property(copy, nonatomic) FGMImageRegistry *imageRegistry; @property(weak, nonatomic) GMSMapView *mapView; @end @@ -399,7 +399,7 @@ - (instancetype)initWithMapView:(GMSMapView *)mapView callbackHandler:(FGMMapsCallbackApi *)callbackHandler clusterManagersController:(nullable FGMClusterManagersController *)clusterManagersController registrar:(NSObject *)registrar - imageRegistry:(ImageRegistry *)imageRegistry { + imageRegistry:(FGMImageRegistry *)imageRegistry { self = [super init]; if (self) { _callbackHandler = callbackHandler; From 5b8555bfdbcd5473caa4c1045fcc772f1128dbcc Mon Sep 17 00:00:00 2001 From: Alexander Troshkov <20989940+aednlaxer@users.noreply.github.com> Date: Mon, 3 Feb 2025 14:26:11 +0200 Subject: [PATCH 06/18] Update comments --- .../google_maps_flutter/lib/src/bitmap_registry.dart | 4 ---- .../google_maps_flutter_ios/ios/Classes/FGMImageRegistry.h | 3 +++ .../google_maps_flutter_ios/ios/Classes/FGMImageRegistry.m | 3 +++ 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter/lib/src/bitmap_registry.dart b/packages/google_maps_flutter/google_maps_flutter/lib/src/bitmap_registry.dart index a0e00081d61..c615c49fb12 100644 --- a/packages/google_maps_flutter/google_maps_flutter/lib/src/bitmap_registry.dart +++ b/packages/google_maps_flutter/google_maps_flutter/lib/src/bitmap_registry.dart @@ -10,10 +10,6 @@ part of '../google_maps_flutter.dart'; /// /// Using bitmap registry is optional. /// -/// Bitmap registry can be used after the map is initialized and displayed -/// on the screen. On Android registry can be also used after map renderer is -/// initialized without map being displayed on the screen. -/// /// Example: /// ```dart /// // Register a bitmap diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.h b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.h index 78bdaea55b5..4232437968f 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.h +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.h @@ -13,6 +13,9 @@ - (instancetype)initWithRegistrar:(NSObject *)registrar; +/// Returns registered image with the given identifier or null if registered image is not found. +/// +/// @param identifier An identifier of the registered image. - (UIImage *)getBitmap:(NSNumber *)identifier; @end diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.m index 6c0da6abfc2..6a7093e8461 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.m @@ -7,7 +7,10 @@ @interface FGMImageRegistry () +/// A dictionary that stores all registered image IDs and corresponding images. @property (nonatomic, strong) NSMutableDictionary *registry; + +/// A registration context of this plugin. @property(weak, nonatomic) NSObject *registrar; @end From 06b40c207060c1c3a1a323f107bfe9b785bcdfda Mon Sep 17 00:00:00 2001 From: Alexander Troshkov <20989940+aednlaxer@users.noreply.github.com> Date: Mon, 3 Feb 2025 14:54:06 +0200 Subject: [PATCH 07/18] Use toBitmapDescriptor when creating bitmaps inside ImageRegistry --- .../flutter/plugins/googlemaps/Convert.java | 40 +------------------ .../plugins/googlemaps/ImageRegistry.java | 10 ++++- 2 files changed, 10 insertions(+), 40 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java index 7e590e07113..3839cdb4f46 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java @@ -60,47 +60,11 @@ class Convert { public static final String HEATMAP_GRADIENT_START_POINTS_KEY = "startPoints"; public static final String HEATMAP_GRADIENT_COLOR_MAP_SIZE_KEY = "colorMapSize"; - private static BitmapDescriptor toBitmapDescriptor( + public static BitmapDescriptor toBitmapDescriptor( Messages.PlatformBitmap platformBitmap, AssetManager assetManager, float density, ImageRegistry imageRegistry) { return toBitmapDescriptor( - platformBitmap, assetManager, density, new BitmapDescriptorFactoryWrapper(), - imageRegistry); - } - - public static BitmapDescriptor createBitmapDescriptor( - Messages.PlatformBitmap platformBitmap, - AssetManager assetManager, - float density, - BitmapDescriptorFactoryWrapper wrapper) { - Object bitmap = platformBitmap.getBitmap(); - - if (bitmap instanceof Messages.PlatformBitmapAsset) { - Messages.PlatformBitmapAsset typedBitmap = (Messages.PlatformBitmapAsset) bitmap; - final String assetPath = typedBitmap.getName(); - final String assetPackage = typedBitmap.getPkg(); - if (assetPackage == null) { - return BitmapDescriptorFactory.fromAsset( - FlutterInjector.instance().flutterLoader().getLookupKeyForAsset(assetPath)); - } else { - return BitmapDescriptorFactory.fromAsset( - FlutterInjector.instance() - .flutterLoader() - .getLookupKeyForAsset(assetPath, assetPackage)); - } - } - if (bitmap instanceof Messages.PlatformBitmapAssetMap) { - Messages.PlatformBitmapAssetMap typedBitmap = (Messages.PlatformBitmapAssetMap) bitmap; - return getBitmapFromAsset( - typedBitmap, assetManager, density, wrapper, new FlutterInjectorWrapper()); - } - if (bitmap instanceof Messages.PlatformBitmapBytesMap) { - Messages.PlatformBitmapBytesMap typedBitmap = (Messages.PlatformBitmapBytesMap) bitmap; - return getBitmapFromBytes(typedBitmap, density, wrapper); - } - // TODO support for legacy Messages.PlatformBitmapAssetImage and Messages.PlatformBitmapBytes - - throw new IllegalArgumentException("PlatformBitmap did not contain a supported subtype."); + platformBitmap, assetManager, density, new BitmapDescriptorFactoryWrapper(), imageRegistry); } private static BitmapDescriptor toBitmapDescriptor( diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java index 9b7275df20a..bffb81d0396 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java @@ -22,8 +22,14 @@ class ImageRegistry implements ImageRegistryApi { @Override public void addBitmapToCache(Long id, PlatformBitmap bitmap) { - final BitmapDescriptor bitmapDescriptor = Convert.createBitmapDescriptor(bitmap, assetManager, - density, new Convert.BitmapDescriptorFactoryWrapper()); + if (!(bitmap.getBitmap() instanceof Messages.PlatformBitmapAsset) && + !(bitmap.getBitmap() instanceof Messages.PlatformBitmapAssetMap) && + !(bitmap.getBitmap() instanceof Messages.PlatformBitmapBytesMap)) { + throw new IllegalArgumentException("PlatformBitmap must contain a supported subtype."); + } + + final BitmapDescriptor bitmapDescriptor = + Convert.toBitmapDescriptor(bitmap, assetManager, density, this); registry.put(id, bitmapDescriptor); } From 0f13881c14f75cf2d8e757b37d501c25f8fff84a Mon Sep 17 00:00:00 2001 From: Alexander Troshkov <20989940+aednlaxer@users.noreply.github.com> Date: Mon, 3 Feb 2025 15:04:26 +0200 Subject: [PATCH 08/18] Add RegisteredMapBitmap doc and example --- .../lib/src/types/bitmap.dart | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/bitmap.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/bitmap.dart index c7d01607d23..d09e3fcb56d 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/bitmap.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/bitmap.dart @@ -498,6 +498,23 @@ abstract class MapBitmap extends BitmapDescriptor { /// Represents a [BitmapDescriptor] that was previously registered with the /// bitmap registry. +/// +/// The [id] is the unique ID of the registered bitmap. The bitmap itself is +/// registered using the bitmap registry and the ID is returned when the bitmap +/// is registered. +/// +/// Following example demonstrates how to register a bitmap using the bitmap +/// registry and create a [RegisteredMapBitmap] instance: +/// +/// ```dart +/// final AssetMapBitmap bitmap = AssetMapBitmap( +/// 'assets/images/map_icon.png', +/// imagePixelRatio: MediaQuery.maybeDevicePixelRatioOf(context), +/// ); +/// final int registeredBitmapId = +/// await GoogleMapBitmapRegistry.instance.register(bitmap); +/// final registeredMapBitmap = RegisteredMapBitmap(id: registeredBitmapId); +/// ``` class RegisteredMapBitmap extends BitmapDescriptor { /// Creates a [RegisteredMapBitmap] with the given [id]. const RegisteredMapBitmap({ From e8a25ebc745b3f89577d2d0eae1aabbd33449726 Mon Sep 17 00:00:00 2001 From: Alexander Troshkov <20989940+aednlaxer@users.noreply.github.com> Date: Mon, 3 Feb 2025 15:04:53 +0200 Subject: [PATCH 09/18] Add default implementation tests --- .../google_maps_flutter_platform_test.dart | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/test/platform_interface/google_maps_flutter_platform_test.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/test/platform_interface/google_maps_flutter_platform_test.dart index b0e48fd474b..5aee1711175 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/test/platform_interface/google_maps_flutter_platform_test.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/test/platform_interface/google_maps_flutter_platform_test.dart @@ -121,6 +121,32 @@ void main() { expect(await platform.getStyleError(mapId: 0), null); }, ); + + test('default implementation of `registerBitmap` throws UnimplementedError', + () { + expect( + () => BuildViewGoogleMapsFlutterPlatform().clearBitmapCache(), + throwsUnimplementedError, + ); + }); + + test( + 'default implementation of `unregisterBitmap` throws UnimplementedError', + () { + expect( + () => BuildViewGoogleMapsFlutterPlatform().clearBitmapCache(), + throwsUnimplementedError, + ); + }); + + test( + 'default implementation of `clearBitmapCache` throws UnimplementedError', + () { + expect( + () => BuildViewGoogleMapsFlutterPlatform().clearBitmapCache(), + throwsUnimplementedError, + ); + }); }); } From d19b6c9e5061a4f4040057bff7411dbb11f347de Mon Sep 17 00:00:00 2001 From: Alexander Troshkov <20989940+aednlaxer@users.noreply.github.com> Date: Tue, 4 Feb 2025 13:31:50 +0200 Subject: [PATCH 10/18] Fix existing Android tests --- .../plugins/googlemaps/ClusterManagersControllerTest.java | 5 +++-- .../plugins/googlemaps/GoogleMapControllerTest.java | 7 +++++-- .../flutter/plugins/googlemaps/MarkersControllerTest.java | 5 ++++- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ClusterManagersControllerTest.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ClusterManagersControllerTest.java index df4208df5e6..680c913beb3 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ClusterManagersControllerTest.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ClusterManagersControllerTest.java @@ -55,6 +55,7 @@ public class ClusterManagersControllerTest { private final float density = 1; @Mock Convert.BitmapDescriptorFactoryWrapper bitmapFactory; + @Mock ImageRegistry imageRegistry; private AutoCloseable mocksClosable; @@ -109,9 +110,9 @@ public void AddClusterManagersAndMarkers() { createPlatformMarker(markerId2, location2, clusterManagerId); Convert.interpretMarkerOptions( - markerData1, markerBuilder1, assetManager, density, bitmapFactory); + markerData1, markerBuilder1, assetManager, density, bitmapFactory, imageRegistry); Convert.interpretMarkerOptions( - markerData2, markerBuilder2, assetManager, density, bitmapFactory); + markerData2, markerBuilder2, assetManager, density, bitmapFactory, imageRegistry); controller.addItem(markerBuilder1); controller.addItem(markerBuilder2); diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/GoogleMapControllerTest.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/GoogleMapControllerTest.java index 48d8b619beb..96d2ee23721 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/GoogleMapControllerTest.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/GoogleMapControllerTest.java @@ -51,6 +51,7 @@ public class GoogleMapControllerTest { @Mock CirclesController mockCirclesController; @Mock HeatmapsController mockHeatmapsController; @Mock TileOverlaysController mockTileOverlaysController; + @Mock ImageRegistry imageRegistry; @Before public void before() { @@ -63,7 +64,8 @@ public void before() { // See getGoogleMapControllerWithMockedDependencies for version with dependency injections. public GoogleMapController getGoogleMapController() { GoogleMapController googleMapController = - new GoogleMapController(0, context, mockMessenger, activity::getLifecycle, null); + new GoogleMapController(0, context, mockMessenger, activity::getLifecycle, null, + imageRegistry); googleMapController.init(); return googleMapController; } @@ -84,7 +86,8 @@ public GoogleMapController getGoogleMapControllerWithMockedDependencies() { mockPolylinesController, mockCirclesController, mockHeatmapsController, - mockTileOverlaysController); + mockTileOverlaysController, + imageRegistry); googleMapController.init(); return googleMapController; } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/MarkersControllerTest.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/MarkersControllerTest.java index 1540ebccf69..174d4215351 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/MarkersControllerTest.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/MarkersControllerTest.java @@ -51,6 +51,7 @@ public class MarkersControllerTest { private AssetManager assetManager; private final float density = 1; private AutoCloseable mocksClosable; + private ImageRegistry imageRegistry; @Mock private Convert.BitmapDescriptorFactoryWrapper bitmapDescriptorFactoryWrapper; @@ -94,13 +95,15 @@ public void setUp() { context = ApplicationProvider.getApplicationContext(); flutterApi = spy(new MapsCallbackApi(mock(BinaryMessenger.class))); clusterManagersController = spy(new ClusterManagersController(flutterApi, context)); + imageRegistry = new ImageRegistry(context); controller = new MarkersController( flutterApi, clusterManagersController, assetManager, density, - bitmapDescriptorFactoryWrapper); + bitmapDescriptorFactoryWrapper, + imageRegistry); googleMap = mock(GoogleMap.class); markerManager = new MarkerManager(googleMap); markerCollection = markerManager.newCollection(); From 08a408b38e50a1028434a37e5db78a1b7f9b9266 Mon Sep 17 00:00:00 2001 From: Alexander Troshkov <20989940+aednlaxer@users.noreply.github.com> Date: Thu, 6 Feb 2025 09:57:49 +0200 Subject: [PATCH 11/18] Add more tests --- .../test/bitmap_registry_test.dart | 63 +++++ .../fake_google_maps_flutter_platform.dart | 27 ++ .../flutter/plugins/googlemaps/Convert.java | 2 +- .../plugins/googlemaps/GoogleMapsPlugin.java | 7 +- .../plugins/googlemaps/ImageRegistry.java | 23 +- .../plugins/googlemaps/ConvertTest.java | 48 ++++ .../plugins/googlemaps/ImageRegistryTest.java | 240 ++++++++++++++++++ .../googlemaps/MarkersControllerTest.java | 2 +- .../bitmap_registry_test.dart | 38 +++ .../bitmap_registry_test.dart | 38 +++ .../bitmap_registry_test.dart | 39 +++ 11 files changed, 515 insertions(+), 12 deletions(-) create mode 100644 packages/google_maps_flutter/google_maps_flutter/test/bitmap_registry_test.dart create mode 100644 packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ImageRegistryTest.java create mode 100644 packages/google_maps_flutter/google_maps_flutter_android/example/integration_test/bitmap_registry_test.dart create mode 100644 packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/integration_test/bitmap_registry_test.dart create mode 100644 packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/bitmap_registry_test.dart diff --git a/packages/google_maps_flutter/google_maps_flutter/test/bitmap_registry_test.dart b/packages/google_maps_flutter/google_maps_flutter/test/bitmap_registry_test.dart new file mode 100644 index 00000000000..23558a25ff8 --- /dev/null +++ b/packages/google_maps_flutter/google_maps_flutter/test/bitmap_registry_test.dart @@ -0,0 +1,63 @@ +import 'dart:typed_data'; + +import 'package:flutter_test/flutter_test.dart'; +import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; + +import 'fake_google_maps_flutter_platform.dart'; + +void main() { + late FakeGoogleMapsFlutterPlatform platform; + + setUp(() { + platform = FakeGoogleMapsFlutterPlatform(); + GoogleMapsFlutterPlatform.instance = platform; + }); + + test('Adding bitmap to registry', () async { + final BytesMapBitmap bitmap = BytesMapBitmap(Uint8List(20)); + final int id = await GoogleMapBitmapRegistry.instance.register(bitmap); + expect(id, 1); + expect( + platform.bitmapRegistryRecorder.bitmaps, + ['REGISTER $id $bitmap'], + ); + }); + + test('Removing bitmap from registry', () async { + final BytesMapBitmap bitmap = BytesMapBitmap(Uint8List(20)); + final int id = await GoogleMapBitmapRegistry.instance.register(bitmap); + await GoogleMapBitmapRegistry.instance.unregister(id); + expect( + platform.bitmapRegistryRecorder.bitmaps, + ['REGISTER $id $bitmap', 'UNREGISTER $id'], + ); + }); + + test('Clearing bitmap registry', () async { + final BytesMapBitmap bitmap = BytesMapBitmap(Uint8List(20)); + final int id1 = await GoogleMapBitmapRegistry.instance.register(bitmap); + final int id2 = await GoogleMapBitmapRegistry.instance.register(bitmap); + expect( + platform.bitmapRegistryRecorder.bitmaps, + ['REGISTER $id1 $bitmap', 'REGISTER $id2 $bitmap'], + ); + + await GoogleMapBitmapRegistry.instance.clear(); + expect( + platform.bitmapRegistryRecorder.bitmaps, + ['REGISTER $id1 $bitmap', 'REGISTER $id2 $bitmap', 'CLEAR CACHE'], + ); + }); + + test('Bitmap ID is incremental', () async { + final BytesMapBitmap bitmap = BytesMapBitmap(Uint8List(20)); + final int id1 = await GoogleMapBitmapRegistry.instance.register(bitmap); + final int id2 = await GoogleMapBitmapRegistry.instance.register(bitmap); + final int id3 = await GoogleMapBitmapRegistry.instance.register(bitmap); + final int id4 = await GoogleMapBitmapRegistry.instance.register(bitmap); + expect(id2, id1 + 1); + expect(id3, id1 + 2); + expect(id4, id1 + 3); + }); +} diff --git a/packages/google_maps_flutter/google_maps_flutter/test/fake_google_maps_flutter_platform.dart b/packages/google_maps_flutter/google_maps_flutter/test/fake_google_maps_flutter_platform.dart index df83400c416..5213887d920 100644 --- a/packages/google_maps_flutter/google_maps_flutter/test/fake_google_maps_flutter_platform.dart +++ b/packages/google_maps_flutter/google_maps_flutter/test/fake_google_maps_flutter_platform.dart @@ -20,6 +20,10 @@ class FakeGoogleMapsFlutterPlatform extends GoogleMapsFlutterPlatform { Map mapInstances = {}; + /// A recorder for the bitmap registry calls. + PlatformBitmapRegistryRecorder bitmapRegistryRecorder = + PlatformBitmapRegistryRecorder(); + PlatformMapStateRecorder get lastCreatedMap => mapInstances[createdIds.last]!; /// Whether to add a small delay to async calls to simulate more realistic @@ -264,6 +268,21 @@ class FakeGoogleMapsFlutterPlatform extends GoogleMapsFlutterPlatform { return mapEventStreamController.stream.whereType(); } + @override + Future registerBitmap(int id, MapBitmap bitmap) async { + bitmapRegistryRecorder.bitmaps.add('REGISTER $id $bitmap'); + } + + @override + Future unregisterBitmap(int id) async { + bitmapRegistryRecorder.bitmaps.add('UNREGISTER $id'); + } + + @override + Future clearBitmapCache() async { + bitmapRegistryRecorder.bitmaps.add('CLEAR CACHE'); + } + @override void dispose({required int mapId}) { disposed = true; @@ -331,3 +350,11 @@ class PlatformMapStateRecorder { final List clusterManagerUpdates = []; } + +/// A fake implementation of native bitmap registry, which stores all the +/// updates for inspection in tests. +class PlatformBitmapRegistryRecorder { + PlatformBitmapRegistryRecorder(); + + final List bitmaps = []; +} diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java index 3839cdb4f46..42d40c1f032 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java @@ -67,7 +67,7 @@ public static BitmapDescriptor toBitmapDescriptor( platformBitmap, assetManager, density, new BitmapDescriptorFactoryWrapper(), imageRegistry); } - private static BitmapDescriptor toBitmapDescriptor( + public static BitmapDescriptor toBitmapDescriptor( Messages.PlatformBitmap platformBitmap, AssetManager assetManager, float density, diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapsPlugin.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapsPlugin.java index cb1912d119f..584cdd1f38b 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapsPlugin.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapsPlugin.java @@ -17,6 +17,7 @@ import io.flutter.embedding.engine.plugins.activity.ActivityAware; import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding; import io.flutter.embedding.engine.plugins.lifecycle.FlutterLifecycleAdapter; +import io.flutter.plugins.googlemaps.Convert.BitmapDescriptorFactoryWrapper; import io.flutter.plugins.googlemaps.Messages.ImageRegistryApi; /** @@ -37,7 +38,11 @@ public GoogleMapsPlugin() {} @Override public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) { - final ImageRegistry imageRegistry = new ImageRegistry(binding.getApplicationContext()); + final ImageRegistry imageRegistry = new ImageRegistry( + binding.getApplicationContext().getAssets(), + new BitmapDescriptorFactoryWrapper(), + binding.getApplicationContext().getResources().getDisplayMetrics().density + ); ImageRegistryApi.setUp(binding.getBinaryMessenger(), imageRegistry); binding diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java index bffb81d0396..94bae585b78 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java @@ -1,27 +1,32 @@ package io.flutter.plugins.googlemaps; -import android.content.Context; import android.content.res.AssetManager; +import androidx.annotation.NonNull; +import io.flutter.plugins.googlemaps.Convert.BitmapDescriptorFactoryWrapper; import io.flutter.plugins.googlemaps.Messages.ImageRegistryApi; import io.flutter.plugins.googlemaps.Messages.PlatformBitmap; import com.google.android.gms.maps.model.BitmapDescriptor; import java.util.HashMap; class ImageRegistry implements ImageRegistryApi { - final Context context; final AssetManager assetManager; + final BitmapDescriptorFactoryWrapper bitmapDescriptorFactoryWrapper; final float density; private final HashMap registry = new HashMap<>(); - ImageRegistry(Context context) { - this.context = context; - this.assetManager = context.getAssets(); - this.density = context.getResources().getDisplayMetrics().density; + ImageRegistry( + AssetManager assetManager, + BitmapDescriptorFactoryWrapper bitmapDescriptorFactoryWrapper, + float density + ) { + this.assetManager = assetManager; + this.bitmapDescriptorFactoryWrapper = bitmapDescriptorFactoryWrapper; + this.density = density; } @Override - public void addBitmapToCache(Long id, PlatformBitmap bitmap) { + public void addBitmapToCache(@NonNull Long id, PlatformBitmap bitmap) { if (!(bitmap.getBitmap() instanceof Messages.PlatformBitmapAsset) && !(bitmap.getBitmap() instanceof Messages.PlatformBitmapAssetMap) && !(bitmap.getBitmap() instanceof Messages.PlatformBitmapBytesMap)) { @@ -29,12 +34,12 @@ public void addBitmapToCache(Long id, PlatformBitmap bitmap) { } final BitmapDescriptor bitmapDescriptor = - Convert.toBitmapDescriptor(bitmap, assetManager, density, this); + Convert.toBitmapDescriptor(bitmap, assetManager, density, bitmapDescriptorFactoryWrapper, this); registry.put(id, bitmapDescriptor); } @Override - public void removeBitmapFromCache(Long id) { + public void removeBitmapFromCache(@NonNull Long id) { registry.remove(id); } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ConvertTest.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ConvertTest.java index a2733980559..b6b9b841e7b 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ConvertTest.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ConvertTest.java @@ -16,12 +16,15 @@ import static io.flutter.plugins.googlemaps.Convert.HEATMAP_RADIUS_KEY; import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; +import android.appwidget.AppWidgetProvider; +import android.content.Context; import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.Canvas; @@ -29,6 +32,7 @@ import android.graphics.Paint; import android.os.Build; import android.util.Base64; +import androidx.test.core.app.ApplicationProvider; import androidx.annotation.NonNull; import com.google.android.gms.maps.model.BitmapDescriptor; import com.google.android.gms.maps.model.LatLng; @@ -40,6 +44,7 @@ import com.google.maps.android.projection.SphericalMercatorProjection; import io.flutter.plugins.googlemaps.Convert.BitmapDescriptorFactoryWrapper; import io.flutter.plugins.googlemaps.Convert.FlutterInjectorWrapper; +import io.flutter.plugins.googlemaps.Messages.PlatformBitmap; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; @@ -335,6 +340,49 @@ public void GetBitmapFromBytesThrowsErrorIfInvalidImageData() { fail("Expected an IllegalArgumentException to be thrown"); } + @Test + public void GetBitmapFromNotRegisteredBitmap() { + ImageRegistry imageRegistry = + new ImageRegistry(assetManager, bitmapDescriptorFactoryWrapper, 1L); + + Messages.PlatformBitmapRegisteredMapBitmap bitmap = + new Messages.PlatformBitmapRegisteredMapBitmap.Builder() + .setId(0L) + .build(); + + BitmapDescriptor result = Convert.getBitmapFromRegisteredBitmap(imageRegistry, bitmap); + Assert.assertEquals(result, null); + } + + @Test + public void GetPreviouslyRegisteredBitmap() { + ImageRegistry imageRegistry = + new ImageRegistry(assetManager, bitmapDescriptorFactoryWrapper, 1L); + + byte[] bmpData = Base64.decode(base64Image, Base64.DEFAULT); + Messages.PlatformBitmapBytesMap bitmap = + new Messages.PlatformBitmapBytesMap.Builder() + .setBitmapScaling(Messages.PlatformMapBitmapScaling.NONE) + .setImagePixelRatio(2.0) + .setByteData(bmpData) + .build(); + PlatformBitmap platformBitmap = new PlatformBitmap.Builder() + .setBitmap(bitmap) + .build(); + when(bitmapDescriptorFactoryWrapper.fromBitmap(any())).thenReturn(mockBitmapDescriptor); + imageRegistry.addBitmapToCache(0L, platformBitmap); + + Messages.PlatformBitmapRegisteredMapBitmap registeredBitmap = + new Messages.PlatformBitmapRegisteredMapBitmap.Builder() + .setId(0L) + .build(); + when(bitmapDescriptorFactoryWrapper.fromBitmap(any())).thenReturn(mockBitmapDescriptor); + BitmapDescriptor result = Convert.getBitmapFromRegisteredBitmap(imageRegistry, + registeredBitmap); + BitmapDescriptor registryBitmapDescriptor = imageRegistry.getBitmap(0L); + Assert.assertEquals(result, registryBitmapDescriptor); + } + @Test public void interpretMapConfiguration_handlesNulls() { final Messages.PlatformMapConfiguration config = diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ImageRegistryTest.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ImageRegistryTest.java new file mode 100644 index 00000000000..3238d2118b1 --- /dev/null +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ImageRegistryTest.java @@ -0,0 +1,240 @@ +package io.flutter.plugins.googlemaps; + +import static org.junit.Assert.fail; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyFloat; +import static org.mockito.Mockito.when; + +import android.content.res.AssetManager; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.os.Build; +import android.util.Base64; +import com.google.android.gms.maps.model.BitmapDescriptor; +import io.flutter.plugins.googlemaps.Convert.BitmapDescriptorFactoryWrapper; +import io.flutter.plugins.googlemaps.Convert.FlutterInjectorWrapper; +import java.io.ByteArrayOutputStream; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; + +@RunWith(RobolectricTestRunner.class) +@Config(minSdk = Build.VERSION_CODES.LOLLIPOP) +public class ImageRegistryTest { + + @Mock + private AssetManager assetManager; + + @Mock + private BitmapDescriptorFactoryWrapper bitmapDescriptorFactoryWrapper; + + @Mock + private BitmapDescriptor mockBitmapDescriptor; + + @Mock + private BitmapDescriptor mockBitmapDescriptor2; + + @Mock + private FlutterInjectorWrapper flutterInjectorWrapper; + + AutoCloseable mockCloseable; + + @Before + public void before() { + mockCloseable = MockitoAnnotations.openMocks(this); + } + + @After + public void tearDown() throws Exception { + mockCloseable.close(); + } + + @Test + public void AddBitmapToCacheRegistersABitmap() { + final ImageRegistry imageRegistry = new ImageRegistry(assetManager, + bitmapDescriptorFactoryWrapper, 1L); + Assert.assertNull(imageRegistry.getBitmap(1L)); + + byte[] bmpData = Base64.decode(generateBase64Image(Color.BLACK), Base64.DEFAULT); + Messages.PlatformBitmapBytesMap bitmap = + new Messages.PlatformBitmapBytesMap.Builder() + .setBitmapScaling(Messages.PlatformMapBitmapScaling.AUTO) + .setImagePixelRatio(2.0) + .setByteData(bmpData) + .build(); + Messages.PlatformBitmap platformBitmap = new Messages.PlatformBitmap.Builder() + .setBitmap(bitmap) + .build(); + + when(bitmapDescriptorFactoryWrapper.fromBitmap(any())).thenReturn(mockBitmapDescriptor); + imageRegistry.addBitmapToCache(1L, platformBitmap); + + Assert.assertEquals(imageRegistry.getBitmap(1L), mockBitmapDescriptor); + } + + @Test + public void AddBitmapToCacheReplacesExistingBitmap() { + final ImageRegistry imageRegistry = new ImageRegistry(assetManager, + bitmapDescriptorFactoryWrapper, 1L); + + // Add bitmap 1 + byte[] bmpData = Base64.decode(generateBase64Image(Color.BLACK), Base64.DEFAULT); + Messages.PlatformBitmapBytesMap bitmap = + new Messages.PlatformBitmapBytesMap.Builder() + .setBitmapScaling(Messages.PlatformMapBitmapScaling.AUTO) + .setImagePixelRatio(2.0) + .setByteData(bmpData) + .build(); + Messages.PlatformBitmap platformBitmap = new Messages.PlatformBitmap.Builder() + .setBitmap(bitmap) + .build(); + when(bitmapDescriptorFactoryWrapper.fromBitmap(any())).thenReturn(mockBitmapDescriptor); + imageRegistry.addBitmapToCache(1L, platformBitmap); + Assert.assertEquals(imageRegistry.getBitmap(1L), mockBitmapDescriptor); + + // Add bitmap 2 + bmpData = Base64.decode(generateBase64Image(Color.RED), Base64.DEFAULT); + bitmap = + new Messages.PlatformBitmapBytesMap.Builder() + .setBitmapScaling(Messages.PlatformMapBitmapScaling.AUTO) + .setImagePixelRatio(2.0) + .setByteData(bmpData) + .build(); + platformBitmap = new Messages.PlatformBitmap.Builder() + .setBitmap(bitmap) + .build(); + when(bitmapDescriptorFactoryWrapper.fromBitmap(any())).thenReturn(mockBitmapDescriptor2); + imageRegistry.addBitmapToCache(1L, platformBitmap); + Assert.assertNotEquals(imageRegistry.getBitmap(1L), mockBitmapDescriptor); + Assert.assertEquals(imageRegistry.getBitmap(1L), mockBitmapDescriptor2); + } + + @Test + public void RemoveBitmapFromCacheRemovesBitmap() { + final ImageRegistry imageRegistry = new ImageRegistry(assetManager, + bitmapDescriptorFactoryWrapper, 1L); + byte[] bmpData = Base64.decode(generateBase64Image(Color.BLACK), Base64.DEFAULT); + Messages.PlatformBitmapBytesMap bitmap = + new Messages.PlatformBitmapBytesMap.Builder() + .setBitmapScaling(Messages.PlatformMapBitmapScaling.AUTO) + .setImagePixelRatio(2.0) + .setByteData(bmpData) + .build(); + Messages.PlatformBitmap platformBitmap = new Messages.PlatformBitmap.Builder() + .setBitmap(bitmap) + .build(); + when(bitmapDescriptorFactoryWrapper.fromBitmap(any())).thenReturn(mockBitmapDescriptor); + imageRegistry.addBitmapToCache(1L, platformBitmap); + Assert.assertEquals(imageRegistry.getBitmap(1L), mockBitmapDescriptor); + + imageRegistry.removeBitmapFromCache(1L); + Assert.assertNull(imageRegistry.getBitmap(1L)); + } + + @Test + public void ClearBitmapCacheRemovesAllSavedBitmaps() { + final ImageRegistry imageRegistry = new ImageRegistry(assetManager, + bitmapDescriptorFactoryWrapper, 1L); + byte[] bmpData = Base64.decode(generateBase64Image(Color.BLACK), Base64.DEFAULT); + Messages.PlatformBitmapBytesMap bitmap = + new Messages.PlatformBitmapBytesMap.Builder() + .setBitmapScaling(Messages.PlatformMapBitmapScaling.AUTO) + .setImagePixelRatio(2.0) + .setByteData(bmpData) + .build(); + Messages.PlatformBitmap platformBitmap = new Messages.PlatformBitmap.Builder() + .setBitmap(bitmap) + .build(); + when(bitmapDescriptorFactoryWrapper.fromBitmap(any())).thenReturn(mockBitmapDescriptor); + + imageRegistry.addBitmapToCache(1L, platformBitmap); + imageRegistry.addBitmapToCache(2L, platformBitmap); + imageRegistry.addBitmapToCache(3L, platformBitmap); + Assert.assertEquals(imageRegistry.getBitmap(1L), mockBitmapDescriptor); + Assert.assertEquals(imageRegistry.getBitmap(2L), mockBitmapDescriptor); + Assert.assertEquals(imageRegistry.getBitmap(3L), mockBitmapDescriptor); + + imageRegistry.clearBitmapCache(); + Assert.assertNull(imageRegistry.getBitmap(1L)); + Assert.assertNull(imageRegistry.getBitmap(2L)); + Assert.assertNull(imageRegistry.getBitmap(3L)); + } + + @Test + public void GetBitmapReturnsNullIfBitmapIsNotAvailable() { + final ImageRegistry imageRegistry = new ImageRegistry(assetManager, + bitmapDescriptorFactoryWrapper, 1L); + Assert.assertNull(imageRegistry.getBitmap(0L)); + } + + @Test + public void GetBitmapReturnsRegisteredBitmap() { + final ImageRegistry imageRegistry = new ImageRegistry(assetManager, + bitmapDescriptorFactoryWrapper, 1L); + byte[] bmpData = Base64.decode(generateBase64Image(Color.BLACK), Base64.DEFAULT); + Messages.PlatformBitmapBytesMap bitmap = + new Messages.PlatformBitmapBytesMap.Builder() + .setBitmapScaling(Messages.PlatformMapBitmapScaling.AUTO) + .setImagePixelRatio(2.0) + .setByteData(bmpData) + .build(); + Messages.PlatformBitmap platformBitmap = new Messages.PlatformBitmap.Builder() + .setBitmap(bitmap) + .build(); + when(bitmapDescriptorFactoryWrapper.fromBitmap(any())).thenReturn(mockBitmapDescriptor); + + Assert.assertNull(imageRegistry.getBitmap(1L)); + imageRegistry.addBitmapToCache(1L, platformBitmap); + Assert.assertEquals(imageRegistry.getBitmap(1L), mockBitmapDescriptor); + } + + @Test(expected = IllegalArgumentException.class) + public void AddBitmapToCacheThrowsOnWrongBitmapType() { + ImageRegistry imageRegistry = + new ImageRegistry(assetManager, bitmapDescriptorFactoryWrapper, 1L); + Messages.PlatformBitmapRegisteredMapBitmap registeredMapBitmap = + new Messages.PlatformBitmapRegisteredMapBitmap.Builder() + .setId(0L) + .build(); + Messages.PlatformBitmap platformBitmap = new Messages.PlatformBitmap.Builder() + .setBitmap(registeredMapBitmap) + .build(); + try { + imageRegistry.addBitmapToCache(0L, platformBitmap); + } catch (IllegalArgumentException e) { + Assert.assertEquals(e.getMessage(), "PlatformBitmap must contain a supported subtype."); + throw e; + } + + fail("Expected an IllegalArgumentException to be thrown"); + } + + // Helper method to generate 1x1 pixel base64 encoded png test image + private String generateBase64Image(int color) { + int width = 1; + int height = 1; + Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + + // Draw on the Bitmap + Paint paint = new Paint(); + paint.setColor(color); + canvas.drawRect(0, 0, width, height, paint); + + // Convert the Bitmap to PNG format + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream); + byte[] pngBytes = outputStream.toByteArray(); + + // Encode the PNG bytes as a base64 string + return Base64.encodeToString(pngBytes, Base64.DEFAULT); + } +} diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/MarkersControllerTest.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/MarkersControllerTest.java index 174d4215351..227c2d35e44 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/MarkersControllerTest.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/MarkersControllerTest.java @@ -95,7 +95,7 @@ public void setUp() { context = ApplicationProvider.getApplicationContext(); flutterApi = spy(new MapsCallbackApi(mock(BinaryMessenger.class))); clusterManagersController = spy(new ClusterManagersController(flutterApi, context)); - imageRegistry = new ImageRegistry(context); + imageRegistry = new ImageRegistry(assetManager, bitmapDescriptorFactoryWrapper, density); controller = new MarkersController( flutterApi, diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/integration_test/bitmap_registry_test.dart b/packages/google_maps_flutter/google_maps_flutter_android/example/integration_test/bitmap_registry_test.dart new file mode 100644 index 00000000000..dd0f8aeb27b --- /dev/null +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/integration_test/bitmap_registry_test.dart @@ -0,0 +1,38 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; +import 'package:integration_test/integration_test.dart'; + +void main() { + IntegrationTestWidgetsFlutterBinding.ensureInitialized(); + GoogleMapsFlutterPlatform.instance.enableDebugInspection(); + + testWidgets('Add bitmap to cache', (WidgetTester tester) async { + final AssetMapBitmap bitmap = AssetMapBitmap( + 'assets/red_square.png', + imagePixelRatio: 1.0, + ); + + await GoogleMapsFlutterPlatform.instance.registerBitmap(1, bitmap); + }); + + testWidgets('Remove bitmap from cache', (WidgetTester tester) async { + final AssetMapBitmap bitmap = AssetMapBitmap( + 'assets/red_square.png', + imagePixelRatio: 1.0, + ); + + await GoogleMapsFlutterPlatform.instance.registerBitmap(1, bitmap); + await GoogleMapsFlutterPlatform.instance.unregisterBitmap(1); + }); + + testWidgets('Clear bitmap cache', (WidgetTester tester) async { + final AssetMapBitmap bitmap = AssetMapBitmap( + 'assets/red_square.png', + imagePixelRatio: 1.0, + ); + + await GoogleMapsFlutterPlatform.instance.clearBitmapCache(); + await GoogleMapsFlutterPlatform.instance.registerBitmap(1, bitmap); + await GoogleMapsFlutterPlatform.instance.clearBitmapCache(); + }); +} diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/integration_test/bitmap_registry_test.dart b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/integration_test/bitmap_registry_test.dart new file mode 100644 index 00000000000..dd0f8aeb27b --- /dev/null +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/integration_test/bitmap_registry_test.dart @@ -0,0 +1,38 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; +import 'package:integration_test/integration_test.dart'; + +void main() { + IntegrationTestWidgetsFlutterBinding.ensureInitialized(); + GoogleMapsFlutterPlatform.instance.enableDebugInspection(); + + testWidgets('Add bitmap to cache', (WidgetTester tester) async { + final AssetMapBitmap bitmap = AssetMapBitmap( + 'assets/red_square.png', + imagePixelRatio: 1.0, + ); + + await GoogleMapsFlutterPlatform.instance.registerBitmap(1, bitmap); + }); + + testWidgets('Remove bitmap from cache', (WidgetTester tester) async { + final AssetMapBitmap bitmap = AssetMapBitmap( + 'assets/red_square.png', + imagePixelRatio: 1.0, + ); + + await GoogleMapsFlutterPlatform.instance.registerBitmap(1, bitmap); + await GoogleMapsFlutterPlatform.instance.unregisterBitmap(1); + }); + + testWidgets('Clear bitmap cache', (WidgetTester tester) async { + final AssetMapBitmap bitmap = AssetMapBitmap( + 'assets/red_square.png', + imagePixelRatio: 1.0, + ); + + await GoogleMapsFlutterPlatform.instance.clearBitmapCache(); + await GoogleMapsFlutterPlatform.instance.registerBitmap(1, bitmap); + await GoogleMapsFlutterPlatform.instance.clearBitmapCache(); + }); +} diff --git a/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/bitmap_registry_test.dart b/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/bitmap_registry_test.dart new file mode 100644 index 00000000000..f5848be1a6a --- /dev/null +++ b/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/bitmap_registry_test.dart @@ -0,0 +1,39 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; +import 'package:integration_test/integration_test.dart'; + +void main() { + IntegrationTestWidgetsFlutterBinding.ensureInitialized(); + GoogleMapsFlutterPlatform.instance.enableDebugInspection(); + + testWidgets('Add bitmap to cache', (WidgetTester tester) async { + final AssetMapBitmap bitmap = AssetMapBitmap( + 'assets/red_square.png', + imagePixelRatio: 1.0, + ); + + await GoogleMapBitmapRegistry.instance.register(bitmap); + }); + + testWidgets('Remove bitmap from cache', (WidgetTester tester) async { + final AssetMapBitmap bitmap = AssetMapBitmap( + 'assets/red_square.png', + imagePixelRatio: 1.0, + ); + + final int id = await GoogleMapBitmapRegistry.instance.register(bitmap); + await GoogleMapBitmapRegistry.instance.unregister(id); + }); + + testWidgets('Clear bitmap cache', (WidgetTester tester) async { + final AssetMapBitmap bitmap = AssetMapBitmap( + 'assets/red_square.png', + imagePixelRatio: 1.0, + ); + + await GoogleMapBitmapRegistry.instance.clear(); + await GoogleMapBitmapRegistry.instance.register(bitmap); + await GoogleMapBitmapRegistry.instance.clear(); + }); +} From ebfb4eb011630b853300490f789cdc7c5792b0f4 Mon Sep 17 00:00:00 2001 From: Alexander Troshkov <20989940+aednlaxer@users.noreply.github.com> Date: Thu, 6 Feb 2025 10:12:57 +0200 Subject: [PATCH 12/18] Clean up iOS implementation --- .../google_maps_flutter_ios/ios/Classes/FGMImageRegistry.h | 6 +++++- .../google_maps_flutter_ios/ios/Classes/FGMImageRegistry.m | 4 ---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.h b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.h index 4232437968f..fcb7afcc282 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.h +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.h @@ -7,6 +7,8 @@ #import "messages.g.h" +NS_ASSUME_NONNULL_BEGIN + @interface FGMImageRegistry : NSObject - (instancetype)init; @@ -16,6 +18,8 @@ /// Returns registered image with the given identifier or null if registered image is not found. /// /// @param identifier An identifier of the registered image. -- (UIImage *)getBitmap:(NSNumber *)identifier; +- (nullable UIImage *)getBitmap:(NSNumber *)identifier; @end + +NS_ASSUME_NONNULL_END diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.m index 6a7093e8461..f13ccac255d 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.m @@ -31,7 +31,6 @@ - (instancetype)init { } - (void)addBitmapToCacheId:(NSInteger)id bitmap:(nonnull FGMPlatformBitmap *)bitmap error:(FlutterError * _Nullable __autoreleasing * _Nonnull)error { - NSLog(@"PUT BITMAP"); CGFloat screenScale = [[UIScreen mainScreen] scale]; UIImage *image = [FLTGoogleMapMarkerController iconFromBitmap:bitmap registrar:_registrar @@ -42,18 +41,15 @@ - (void)addBitmapToCacheId:(NSInteger)id bitmap:(nonnull FGMPlatformBitmap *)bit } - (void)removeBitmapFromCacheId:(NSInteger)id error:(FlutterError * _Nullable __autoreleasing * _Nonnull)error { - NSLog(@"REMOBE BITMAP"); NSNumber *idNumber = [NSNumber numberWithInteger:id]; [self.registry removeObjectForKey:idNumber]; } - (void)clearBitmapCacheWithError:(FlutterError * _Nullable __autoreleasing * _Nonnull)error { - NSLog(@"CLEAR BITMAP"); [self.registry removeAllObjects]; } - (UIImage *)getBitmap:(NSNumber *)identifier { -// NSLog(@"get BITMAP %@", identifier); return self.registry[identifier]; } From 2e2bf8dc8f822d2590198e51fdde8f0bb7b1c2fb Mon Sep 17 00:00:00 2001 From: Alexander Troshkov <20989940+aednlaxer@users.noreply.github.com> Date: Thu, 6 Feb 2025 13:11:01 +0200 Subject: [PATCH 13/18] Fix tests --- ...itmap_registry_test.dart => bitmap_registry_tests.dart} | 4 +--- .../example/integration_test/latest_renderer_test.dart | 2 ++ .../ios/RunnerTests/FGMClusterManagersControllerTests.m | 4 +++- .../example/ios14/ios/RunnerTests/GoogleMapsTests.m | 7 +++++-- .../google_maps_flutter_ios/ios/Classes/FGMImageRegistry.h | 2 -- .../google_maps_flutter_ios/ios/Classes/FGMImageRegistry.m | 4 ---- 6 files changed, 11 insertions(+), 12 deletions(-) rename packages/google_maps_flutter/google_maps_flutter_android/example/integration_test/{bitmap_registry_test.dart => bitmap_registry_tests.dart} (90%) diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/integration_test/bitmap_registry_test.dart b/packages/google_maps_flutter/google_maps_flutter_android/example/integration_test/bitmap_registry_tests.dart similarity index 90% rename from packages/google_maps_flutter/google_maps_flutter_android/example/integration_test/bitmap_registry_test.dart rename to packages/google_maps_flutter/google_maps_flutter_android/example/integration_test/bitmap_registry_tests.dart index dd0f8aeb27b..e282de2f28a 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/example/integration_test/bitmap_registry_test.dart +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/integration_test/bitmap_registry_tests.dart @@ -1,9 +1,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; -import 'package:integration_test/integration_test.dart'; -void main() { - IntegrationTestWidgetsFlutterBinding.ensureInitialized(); +void bitmapRegistryTests() { GoogleMapsFlutterPlatform.instance.enableDebugInspection(); testWidgets('Add bitmap to cache', (WidgetTester tester) async { diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/integration_test/latest_renderer_test.dart b/packages/google_maps_flutter/google_maps_flutter_android/example/integration_test/latest_renderer_test.dart index f739211a97f..df205a58d24 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/example/integration_test/latest_renderer_test.dart +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/integration_test/latest_renderer_test.dart @@ -8,6 +8,7 @@ import 'package:google_maps_flutter_android/google_maps_flutter_android.dart'; import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; import 'package:integration_test/integration_test.dart'; +import 'bitmap_registry_tests.dart' show bitmapRegistryTests; import 'google_maps_tests.dart' show googleMapsTests; void main() { @@ -44,4 +45,5 @@ void main() { // Run tests. googleMapsTests(); + bitmapRegistryTests(); } diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/FGMClusterManagersControllerTests.m b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/FGMClusterManagersControllerTests.m index 8d435eb4941..07941e6824f 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/FGMClusterManagersControllerTests.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/FGMClusterManagersControllerTests.m @@ -30,12 +30,14 @@ - (void)testClustering { FGMClusterManagersController *clusterManagersController = [[FGMClusterManagersController alloc] initWithMapView:mapView callbackHandler:handler]; + FGMImageRegistry *imageRegistry = [[FGMImageRegistry alloc] initWithRegistrar:registrar]; FLTMarkersController *markersController = [[FLTMarkersController alloc] initWithMapView:mapView callbackHandler:handler clusterManagersController:clusterManagersController - registrar:registrar]; + registrar:registrar + imageRegistry:imageRegistry]; // Add cluster managers. NSString *clusterManagerId = @"cm"; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsTests.m b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsTests.m index c175550dd2c..08237f8589a 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsTests.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsTests.m @@ -57,9 +57,12 @@ - (void)testFrameObserver { - (void)testMapsServiceSync { id registrar = OCMProtocolMock(@protocol(FlutterPluginRegistrar)); - FLTGoogleMapFactory *factory1 = [[FLTGoogleMapFactory alloc] initWithRegistrar:registrar]; + FGMImageRegistry *imageRegistry = [[FGMImageRegistry alloc] initWithRegistrar:registrar]; + FLTGoogleMapFactory *factory1 = [[FLTGoogleMapFactory alloc] initWithRegistrar:registrar + imageRegistry:imageRegistry]; XCTAssertNotNil(factory1.sharedMapServices); - FLTGoogleMapFactory *factory2 = [[FLTGoogleMapFactory alloc] initWithRegistrar:registrar]; + FLTGoogleMapFactory *factory2 = [[FLTGoogleMapFactory alloc] initWithRegistrar:registrar + imageRegistry:imageRegistry]; // Test pointer equality, should be same retained singleton +[GMSServices sharedServices] object. // Retaining the opaque object should be enough to avoid multiple internal initializations, // but don't test the internals of the GoogleMaps API. Assume that it does what is documented. diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.h b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.h index fcb7afcc282..11310df7da3 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.h +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.h @@ -11,8 +11,6 @@ NS_ASSUME_NONNULL_BEGIN @interface FGMImageRegistry : NSObject -- (instancetype)init; - - (instancetype)initWithRegistrar:(NSObject *)registrar; /// Returns registered image with the given identifier or null if registered image is not found. diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.m index f13ccac255d..7a08015eb91 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.m @@ -26,10 +26,6 @@ - (instancetype)initWithRegistrar:(NSObject *)registrar return self; } -- (instancetype)init { - return [self initWithRegistrar:nil]; -} - - (void)addBitmapToCacheId:(NSInteger)id bitmap:(nonnull FGMPlatformBitmap *)bitmap error:(FlutterError * _Nullable __autoreleasing * _Nonnull)error { CGFloat screenScale = [[UIScreen mainScreen] scale]; UIImage *image = [FLTGoogleMapMarkerController iconFromBitmap:bitmap From 49d9a0511f6b96e18413384c1fe142026ecf3661 Mon Sep 17 00:00:00 2001 From: Alexander Troshkov <20989940+aednlaxer@users.noreply.github.com> Date: Thu, 6 Feb 2025 13:15:02 +0200 Subject: [PATCH 14/18] Reformat code --- .../flutter/plugins/googlemaps/Convert.java | 15 +- .../plugins/googlemaps/GoogleMapBuilder.java | 4 +- .../googlemaps/GoogleMapController.java | 6 +- .../plugins/googlemaps/GoogleMapFactory.java | 4 +- .../plugins/googlemaps/GoogleMapsPlugin.java | 13 +- .../plugins/googlemaps/ImageRegistry.java | 14 +- .../plugins/googlemaps/MarkersController.java | 18 +- .../flutter/plugins/googlemaps/Messages.java | 1534 ++++++++++----- .../googlemaps/PolylinesController.java | 12 +- .../plugins/googlemaps/ConvertTest.java | 20 +- .../googlemaps/GoogleMapControllerTest.java | 4 +- .../plugins/googlemaps/ImageRegistryTest.java | 78 +- .../lib/src/messages.g.dart | 771 +++++--- .../ios/Classes/FGMImageRegistry.h | 2 +- .../ios/Classes/FGMImageRegistry.m | 45 +- .../ios/Classes/FLTGoogleMapsPlugin.h | 2 +- .../ios/Classes/FLTGoogleMapsPlugin.m | 6 +- .../ios/Classes/GoogleMapController.h | 2 +- .../ios/Classes/GoogleMapController.m | 2 +- .../ios/Classes/GoogleMapMarkerController.h | 2 +- .../ios/Classes/GoogleMapMarkerController.m | 4 +- .../ios/Classes/messages.g.h | 687 ++++--- .../ios/Classes/messages.g.m | 1745 ++++++++++------- .../lib/src/messages.g.dart | 732 ++++--- 24 files changed, 3491 insertions(+), 2231 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java index 42d40c1f032..56edd6227f7 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java @@ -61,7 +61,9 @@ class Convert { public static final String HEATMAP_GRADIENT_COLOR_MAP_SIZE_KEY = "colorMapSize"; public static BitmapDescriptor toBitmapDescriptor( - Messages.PlatformBitmap platformBitmap, AssetManager assetManager, float density, + Messages.PlatformBitmap platformBitmap, + AssetManager assetManager, + float density, ImageRegistry imageRegistry) { return toBitmapDescriptor( platformBitmap, assetManager, density, new BitmapDescriptorFactoryWrapper(), imageRegistry); @@ -193,8 +195,7 @@ public static BitmapDescriptor getBitmapFromBytes( } public static BitmapDescriptor getBitmapFromRegisteredBitmap( - ImageRegistry imageRegistry, - Messages.PlatformBitmapRegisteredMapBitmap registeredBitmap) { + ImageRegistry imageRegistry, Messages.PlatformBitmapRegisteredMapBitmap registeredBitmap) { return imageRegistry.getBitmap(registeredBitmap.getId()); } @@ -608,8 +609,8 @@ static void interpretMarkerOptions( sink.setConsumeTapEvents(marker.getConsumeTapEvents()); sink.setDraggable(marker.getDraggable()); sink.setFlat(marker.getFlat()); - sink.setIcon(toBitmapDescriptor(marker.getIcon(), assetManager, density, wrapper, - imageRegistry)); + sink.setIcon( + toBitmapDescriptor(marker.getIcon(), assetManager, density, wrapper, imageRegistry)); interpretInfoWindowOptions(sink, marker.getInfoWindow()); sink.setPosition(toLatLng(marker.getPosition().toList())); sink.setRotation(marker.getRotation().floatValue()); @@ -833,7 +834,9 @@ private static List patternFromPigeon( } private static Cap capFromPigeon( - Messages.PlatformCap cap, AssetManager assetManager, ImageRegistry imageRegistry, + Messages.PlatformCap cap, + AssetManager assetManager, + ImageRegistry imageRegistry, float density) { switch (cap.getType()) { case BUTT_CAP: diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapBuilder.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapBuilder.java index 4d82162dc64..05778789aba 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapBuilder.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapBuilder.java @@ -39,8 +39,8 @@ GoogleMapController build( LifecycleProvider lifecycleProvider, ImageRegistry imageRegistry) { final GoogleMapController controller = - new GoogleMapController(id, context, binaryMessenger, lifecycleProvider, options, - imageRegistry); + new GoogleMapController( + id, context, binaryMessenger, lifecycleProvider, options, imageRegistry); controller.init(); controller.setMyLocationEnabled(myLocationEnabled); controller.setMyLocationButtonEnabled(myLocationButtonEnabled); diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java index 473313da55e..a74d42727e7 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java @@ -106,7 +106,7 @@ class GoogleMapController private @Nullable String initialMapStyle; private boolean lastSetStyleSucceeded; @VisibleForTesting List initialPadding; - private final ImageRegistry imageRegistry; + private final ImageRegistry imageRegistry; GoogleMapController( int id, @@ -136,8 +136,8 @@ class GoogleMapController new Convert.BitmapDescriptorFactoryWrapper(), imageRegistry); this.polygonsController = new PolygonsController(flutterApi, density); - this.polylinesController = new PolylinesController(flutterApi, assetManager, imageRegistry, - density); + this.polylinesController = + new PolylinesController(flutterApi, assetManager, imageRegistry, density); this.circlesController = new CirclesController(flutterApi, density); this.heatmapsController = new HeatmapsController(); this.tileOverlaysController = new TileOverlaysController(flutterApi); diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapFactory.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapFactory.java index 405b258a654..a4336c882b1 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapFactory.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapFactory.java @@ -21,7 +21,9 @@ public class GoogleMapFactory extends PlatformViewFactory { private final ImageRegistry imageRegistry; GoogleMapFactory( - BinaryMessenger binaryMessenger, Context context, LifecycleProvider lifecycleProvider, + BinaryMessenger binaryMessenger, + Context context, + LifecycleProvider lifecycleProvider, ImageRegistry imageRegistry) { super(Messages.MapsApi.getCodec()); diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapsPlugin.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapsPlugin.java index 584cdd1f38b..39af4fb612b 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapsPlugin.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapsPlugin.java @@ -38,11 +38,11 @@ public GoogleMapsPlugin() {} @Override public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) { - final ImageRegistry imageRegistry = new ImageRegistry( - binding.getApplicationContext().getAssets(), - new BitmapDescriptorFactoryWrapper(), - binding.getApplicationContext().getResources().getDisplayMetrics().density - ); + final ImageRegistry imageRegistry = + new ImageRegistry( + binding.getApplicationContext().getAssets(), + new BitmapDescriptorFactoryWrapper(), + binding.getApplicationContext().getResources().getDisplayMetrics().density); ImageRegistryApi.setUp(binding.getBinaryMessenger(), imageRegistry); binding @@ -59,8 +59,7 @@ public Lifecycle getLifecycle() { return lifecycle; } }, - imageRegistry - )); + imageRegistry)); } @Override diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java index 94bae585b78..a2b66e5a325 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java @@ -2,10 +2,10 @@ import android.content.res.AssetManager; import androidx.annotation.NonNull; +import com.google.android.gms.maps.model.BitmapDescriptor; import io.flutter.plugins.googlemaps.Convert.BitmapDescriptorFactoryWrapper; import io.flutter.plugins.googlemaps.Messages.ImageRegistryApi; import io.flutter.plugins.googlemaps.Messages.PlatformBitmap; -import com.google.android.gms.maps.model.BitmapDescriptor; import java.util.HashMap; class ImageRegistry implements ImageRegistryApi { @@ -18,8 +18,7 @@ class ImageRegistry implements ImageRegistryApi { ImageRegistry( AssetManager assetManager, BitmapDescriptorFactoryWrapper bitmapDescriptorFactoryWrapper, - float density - ) { + float density) { this.assetManager = assetManager; this.bitmapDescriptorFactoryWrapper = bitmapDescriptorFactoryWrapper; this.density = density; @@ -27,14 +26,15 @@ class ImageRegistry implements ImageRegistryApi { @Override public void addBitmapToCache(@NonNull Long id, PlatformBitmap bitmap) { - if (!(bitmap.getBitmap() instanceof Messages.PlatformBitmapAsset) && - !(bitmap.getBitmap() instanceof Messages.PlatformBitmapAssetMap) && - !(bitmap.getBitmap() instanceof Messages.PlatformBitmapBytesMap)) { + if (!(bitmap.getBitmap() instanceof Messages.PlatformBitmapAsset) + && !(bitmap.getBitmap() instanceof Messages.PlatformBitmapAssetMap) + && !(bitmap.getBitmap() instanceof Messages.PlatformBitmapBytesMap)) { throw new IllegalArgumentException("PlatformBitmap must contain a supported subtype."); } final BitmapDescriptor bitmapDescriptor = - Convert.toBitmapDescriptor(bitmap, assetManager, density, bitmapDescriptorFactoryWrapper, this); + Convert.toBitmapDescriptor( + bitmap, assetManager, density, bitmapDescriptorFactoryWrapper, this); registry.put(id, bitmapDescriptor); } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/MarkersController.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/MarkersController.java index 584b1191c72..62c9ae4a606 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/MarkersController.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/MarkersController.java @@ -179,7 +179,11 @@ private void addMarker(@NonNull Messages.PlatformMarker marker) { String clusterManagerId = marker.getClusterManagerId(); MarkerBuilder markerBuilder = new MarkerBuilder(markerId, clusterManagerId); Convert.interpretMarkerOptions( - marker, markerBuilder, assetManager, density, bitmapDescriptorFactoryWrapper, + marker, + markerBuilder, + assetManager, + density, + bitmapDescriptorFactoryWrapper, imageRegistry); addMarker(markerBuilder); } @@ -237,14 +241,22 @@ private void changeMarker(@NonNull Messages.PlatformMarker marker) { // Update marker builder. Convert.interpretMarkerOptions( - marker, markerBuilder, assetManager, density, bitmapDescriptorFactoryWrapper, + marker, + markerBuilder, + assetManager, + density, + bitmapDescriptorFactoryWrapper, imageRegistry); // Update existing marker on map. MarkerController markerController = markerIdToController.get(markerId); if (markerController != null) { Convert.interpretMarkerOptions( - marker, markerController, assetManager, density, bitmapDescriptorFactoryWrapper, + marker, + markerController, + assetManager, + density, + bitmapDescriptorFactoryWrapper, imageRegistry); } } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Messages.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Messages.java index b314c3837f4..757734e8247 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Messages.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Messages.java @@ -23,7 +23,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -41,8 +40,7 @@ public static class FlutterError extends RuntimeException { /** The error details. Must be a datatype supported by the api codec. */ public final Object details; - public FlutterError(@NonNull String code, @Nullable String message, @Nullable Object details) - { + public FlutterError(@NonNull String code, @Nullable String message, @Nullable Object details) { super(message); this.code = code; this.details = details; @@ -61,14 +59,15 @@ protected static ArrayList wrapError(@NonNull Throwable exception) { errorList.add(exception.toString()); errorList.add(exception.getClass().getSimpleName()); errorList.add( - "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); + "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); } return errorList; } @NonNull protected static FlutterError createConnectionError(@NonNull String channelName) { - return new FlutterError("channel-error", "Unable to establish connection on channel: " + channelName + ".", ""); + return new FlutterError( + "channel-error", "Unable to establish connection on channel: " + channelName + ".", ""); } @Target(METHOD) @@ -115,9 +114,9 @@ public enum PlatformJointType { } /** - * Enumeration of possible types of PlatformCap, corresponding to the - * subclasses of Cap in the Google Maps Android SDK. - * See https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/Cap. + * Enumeration of possible types of PlatformCap, corresponding to the subclasses of Cap in the + * Google Maps Android SDK. See + * https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/Cap. */ public enum PlatformCapType { BUTT_CAP(0), @@ -160,7 +159,7 @@ public enum PlatformMapBitmapScaling { /** * Pigeon representatation of a CameraPosition. * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCameraPosition { private @NonNull Double bearing; @@ -220,10 +219,17 @@ public void setZoom(@NonNull Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformCameraPosition that = (PlatformCameraPosition) o; - return bearing.equals(that.bearing) && target.equals(that.target) && tilt.equals(that.tilt) && zoom.equals(that.zoom); + return bearing.equals(that.bearing) + && target.equals(that.target) + && tilt.equals(that.tilt) + && zoom.equals(that.zoom); } @Override @@ -302,16 +308,14 @@ ArrayList toList() { /** * Pigeon representation of a CameraUpdate. * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCameraUpdate { /** - * This Object shall be any of the below classes prefixed with - * PlatformCameraUpdate. Each such class represents a different type of - * camera update, and each holds a different set of data, preventing the - * use of a single unified class. Pigeon does not support inheritance, which - * prevents a more strict type bound. - * See https://github.com/flutter/flutter/issues/117819. + * This Object shall be any of the below classes prefixed with PlatformCameraUpdate. Each such + * class represents a different type of camera update, and each holds a different set of data, + * preventing the use of a single unified class. Pigeon does not support inheritance, which + * prevents a more strict type bound. See https://github.com/flutter/flutter/issues/117819. */ private @NonNull Object cameraUpdate; @@ -331,8 +335,12 @@ public void setCameraUpdate(@NonNull Object setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformCameraUpdate that = (PlatformCameraUpdate) o; return cameraUpdate.equals(that.cameraUpdate); } @@ -377,7 +385,7 @@ ArrayList toList() { /** * Pigeon equivalent of NewCameraPosition * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCameraUpdateNewCameraPosition { private @NonNull PlatformCameraPosition cameraPosition; @@ -398,8 +406,12 @@ public void setCameraPosition(@NonNull PlatformCameraPosition setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformCameraUpdateNewCameraPosition that = (PlatformCameraUpdateNewCameraPosition) o; return cameraPosition.equals(that.cameraPosition); } @@ -420,7 +432,8 @@ public static final class Builder { } public @NonNull PlatformCameraUpdateNewCameraPosition build() { - PlatformCameraUpdateNewCameraPosition pigeonReturn = new PlatformCameraUpdateNewCameraPosition(); + PlatformCameraUpdateNewCameraPosition pigeonReturn = + new PlatformCameraUpdateNewCameraPosition(); pigeonReturn.setCameraPosition(cameraPosition); return pigeonReturn; } @@ -433,8 +446,10 @@ ArrayList toList() { return toListResult; } - static @NonNull PlatformCameraUpdateNewCameraPosition fromList(@NonNull ArrayList pigeonVar_list) { - PlatformCameraUpdateNewCameraPosition pigeonResult = new PlatformCameraUpdateNewCameraPosition(); + static @NonNull PlatformCameraUpdateNewCameraPosition fromList( + @NonNull ArrayList pigeonVar_list) { + PlatformCameraUpdateNewCameraPosition pigeonResult = + new PlatformCameraUpdateNewCameraPosition(); Object cameraPosition = pigeonVar_list.get(0); pigeonResult.setCameraPosition((PlatformCameraPosition) cameraPosition); return pigeonResult; @@ -444,7 +459,7 @@ ArrayList toList() { /** * Pigeon equivalent of NewLatLng * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCameraUpdateNewLatLng { private @NonNull PlatformLatLng latLng; @@ -465,8 +480,12 @@ public void setLatLng(@NonNull PlatformLatLng setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformCameraUpdateNewLatLng that = (PlatformCameraUpdateNewLatLng) o; return latLng.equals(that.latLng); } @@ -500,7 +519,8 @@ ArrayList toList() { return toListResult; } - static @NonNull PlatformCameraUpdateNewLatLng fromList(@NonNull ArrayList pigeonVar_list) { + static @NonNull PlatformCameraUpdateNewLatLng fromList( + @NonNull ArrayList pigeonVar_list) { PlatformCameraUpdateNewLatLng pigeonResult = new PlatformCameraUpdateNewLatLng(); Object latLng = pigeonVar_list.get(0); pigeonResult.setLatLng((PlatformLatLng) latLng); @@ -511,7 +531,7 @@ ArrayList toList() { /** * Pigeon equivalent of NewLatLngBounds * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCameraUpdateNewLatLngBounds { private @NonNull PlatformLatLngBounds bounds; @@ -545,8 +565,12 @@ public void setPadding(@NonNull Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformCameraUpdateNewLatLngBounds that = (PlatformCameraUpdateNewLatLngBounds) o; return bounds.equals(that.bounds) && padding.equals(that.padding); } @@ -575,7 +599,8 @@ public static final class Builder { } public @NonNull PlatformCameraUpdateNewLatLngBounds build() { - PlatformCameraUpdateNewLatLngBounds pigeonReturn = new PlatformCameraUpdateNewLatLngBounds(); + PlatformCameraUpdateNewLatLngBounds pigeonReturn = + new PlatformCameraUpdateNewLatLngBounds(); pigeonReturn.setBounds(bounds); pigeonReturn.setPadding(padding); return pigeonReturn; @@ -590,7 +615,8 @@ ArrayList toList() { return toListResult; } - static @NonNull PlatformCameraUpdateNewLatLngBounds fromList(@NonNull ArrayList pigeonVar_list) { + static @NonNull PlatformCameraUpdateNewLatLngBounds fromList( + @NonNull ArrayList pigeonVar_list) { PlatformCameraUpdateNewLatLngBounds pigeonResult = new PlatformCameraUpdateNewLatLngBounds(); Object bounds = pigeonVar_list.get(0); pigeonResult.setBounds((PlatformLatLngBounds) bounds); @@ -603,7 +629,7 @@ ArrayList toList() { /** * Pigeon equivalent of NewLatLngZoom * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCameraUpdateNewLatLngZoom { private @NonNull PlatformLatLng latLng; @@ -637,8 +663,12 @@ public void setZoom(@NonNull Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformCameraUpdateNewLatLngZoom that = (PlatformCameraUpdateNewLatLngZoom) o; return latLng.equals(that.latLng) && zoom.equals(that.zoom); } @@ -682,7 +712,8 @@ ArrayList toList() { return toListResult; } - static @NonNull PlatformCameraUpdateNewLatLngZoom fromList(@NonNull ArrayList pigeonVar_list) { + static @NonNull PlatformCameraUpdateNewLatLngZoom fromList( + @NonNull ArrayList pigeonVar_list) { PlatformCameraUpdateNewLatLngZoom pigeonResult = new PlatformCameraUpdateNewLatLngZoom(); Object latLng = pigeonVar_list.get(0); pigeonResult.setLatLng((PlatformLatLng) latLng); @@ -695,7 +726,7 @@ ArrayList toList() { /** * Pigeon equivalent of ScrollBy * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCameraUpdateScrollBy { private @NonNull Double dx; @@ -729,8 +760,12 @@ public void setDy(@NonNull Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformCameraUpdateScrollBy that = (PlatformCameraUpdateScrollBy) o; return dx.equals(that.dx) && dy.equals(that.dy); } @@ -774,7 +809,8 @@ ArrayList toList() { return toListResult; } - static @NonNull PlatformCameraUpdateScrollBy fromList(@NonNull ArrayList pigeonVar_list) { + static @NonNull PlatformCameraUpdateScrollBy fromList( + @NonNull ArrayList pigeonVar_list) { PlatformCameraUpdateScrollBy pigeonResult = new PlatformCameraUpdateScrollBy(); Object dx = pigeonVar_list.get(0); pigeonResult.setDx((Double) dx); @@ -787,7 +823,7 @@ ArrayList toList() { /** * Pigeon equivalent of ZoomBy * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCameraUpdateZoomBy { private @NonNull Double amount; @@ -818,8 +854,12 @@ public void setFocus(@Nullable PlatformDoublePair setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformCameraUpdateZoomBy that = (PlatformCameraUpdateZoomBy) o; return amount.equals(that.amount) && Objects.equals(focus, that.focus); } @@ -876,7 +916,7 @@ ArrayList toList() { /** * Pigeon equivalent of ZoomIn/ZoomOut * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCameraUpdateZoom { private @NonNull Boolean out; @@ -897,8 +937,12 @@ public void setOut(@NonNull Boolean setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformCameraUpdateZoom that = (PlatformCameraUpdateZoom) o; return out.equals(that.out); } @@ -943,7 +987,7 @@ ArrayList toList() { /** * Pigeon equivalent of ZoomTo * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCameraUpdateZoomTo { private @NonNull Double zoom; @@ -964,8 +1008,12 @@ public void setZoom(@NonNull Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformCameraUpdateZoomTo that = (PlatformCameraUpdateZoomTo) o; return zoom.equals(that.zoom); } @@ -1010,7 +1058,7 @@ ArrayList toList() { /** * Pigeon equivalent of the Circle class. * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCircle { private @NonNull Boolean consumeTapEvents; @@ -1135,15 +1183,36 @@ public void setCircleId(@NonNull String setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformCircle that = (PlatformCircle) o; - return consumeTapEvents.equals(that.consumeTapEvents) && fillColor.equals(that.fillColor) && strokeColor.equals(that.strokeColor) && visible.equals(that.visible) && strokeWidth.equals(that.strokeWidth) && zIndex.equals(that.zIndex) && center.equals(that.center) && radius.equals(that.radius) && circleId.equals(that.circleId); + return consumeTapEvents.equals(that.consumeTapEvents) + && fillColor.equals(that.fillColor) + && strokeColor.equals(that.strokeColor) + && visible.equals(that.visible) + && strokeWidth.equals(that.strokeWidth) + && zIndex.equals(that.zIndex) + && center.equals(that.center) + && radius.equals(that.radius) + && circleId.equals(that.circleId); } @Override public int hashCode() { - return Objects.hash(consumeTapEvents, fillColor, strokeColor, visible, strokeWidth, zIndex, center, radius, circleId); + return Objects.hash( + consumeTapEvents, + fillColor, + strokeColor, + visible, + strokeWidth, + zIndex, + center, + radius, + circleId); } public static final class Builder { @@ -1277,13 +1346,12 @@ ArrayList toList() { /** * Pigeon equivalent of the Heatmap class. * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformHeatmap { /** - * The heatmap data, as JSON. This should only be set from - * Heatmap.toJson, and the native code must interpret it according to the - * internal implementation details of that method. + * The heatmap data, as JSON. This should only be set from Heatmap.toJson, and the native code + * must interpret it according to the internal implementation details of that method. */ private @NonNull Map json; @@ -1303,8 +1371,12 @@ public void setJson(@NonNull Map setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformHeatmap that = (PlatformHeatmap) o; return json.equals(that.json); } @@ -1349,7 +1421,7 @@ ArrayList toList() { /** * Pigeon equivalent of the ClusterManager class. * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformClusterManager { private @NonNull String identifier; @@ -1370,8 +1442,12 @@ public void setIdentifier(@NonNull String setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformClusterManager that = (PlatformClusterManager) o; return identifier.equals(that.identifier); } @@ -1416,7 +1492,7 @@ ArrayList toList() { /** * Pair of double values, such as for an offset or size. * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformDoublePair { private @NonNull Double x; @@ -1450,8 +1526,12 @@ public void setY(@NonNull Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformDoublePair that = (PlatformDoublePair) o; return x.equals(that.x) && y.equals(that.y); } @@ -1508,7 +1588,7 @@ ArrayList toList() { /** * Pigeon equivalent of the InfoWindow class. * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformInfoWindow { private @Nullable String title; @@ -1549,10 +1629,16 @@ public void setAnchor(@NonNull PlatformDoublePair setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformInfoWindow that = (PlatformInfoWindow) o; - return Objects.equals(title, that.title) && Objects.equals(snippet, that.snippet) && anchor.equals(that.anchor); + return Objects.equals(title, that.title) + && Objects.equals(snippet, that.snippet) + && anchor.equals(that.anchor); } @Override @@ -1619,7 +1705,7 @@ ArrayList toList() { /** * Pigeon equivalent of the Marker class. * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformMarker { private @NonNull Double alpha; @@ -1793,15 +1879,44 @@ public void setClusterManagerId(@Nullable String setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformMarker that = (PlatformMarker) o; - return alpha.equals(that.alpha) && anchor.equals(that.anchor) && consumeTapEvents.equals(that.consumeTapEvents) && draggable.equals(that.draggable) && flat.equals(that.flat) && icon.equals(that.icon) && infoWindow.equals(that.infoWindow) && position.equals(that.position) && rotation.equals(that.rotation) && visible.equals(that.visible) && zIndex.equals(that.zIndex) && markerId.equals(that.markerId) && Objects.equals(clusterManagerId, that.clusterManagerId); + return alpha.equals(that.alpha) + && anchor.equals(that.anchor) + && consumeTapEvents.equals(that.consumeTapEvents) + && draggable.equals(that.draggable) + && flat.equals(that.flat) + && icon.equals(that.icon) + && infoWindow.equals(that.infoWindow) + && position.equals(that.position) + && rotation.equals(that.rotation) + && visible.equals(that.visible) + && zIndex.equals(that.zIndex) + && markerId.equals(that.markerId) + && Objects.equals(clusterManagerId, that.clusterManagerId); } @Override public int hashCode() { - return Objects.hash(alpha, anchor, consumeTapEvents, draggable, flat, icon, infoWindow, position, rotation, visible, zIndex, markerId, clusterManagerId); + return Objects.hash( + alpha, + anchor, + consumeTapEvents, + draggable, + flat, + icon, + infoWindow, + position, + rotation, + visible, + zIndex, + markerId, + clusterManagerId); } public static final class Builder { @@ -1983,7 +2098,7 @@ ArrayList toList() { /** * Pigeon equivalent of the Polygon class. * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformPolygon { private @NonNull String polygonId; @@ -2121,15 +2236,38 @@ public void setZIndex(@NonNull Long setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformPolygon that = (PlatformPolygon) o; - return polygonId.equals(that.polygonId) && consumesTapEvents.equals(that.consumesTapEvents) && fillColor.equals(that.fillColor) && geodesic.equals(that.geodesic) && points.equals(that.points) && holes.equals(that.holes) && visible.equals(that.visible) && strokeColor.equals(that.strokeColor) && strokeWidth.equals(that.strokeWidth) && zIndex.equals(that.zIndex); + return polygonId.equals(that.polygonId) + && consumesTapEvents.equals(that.consumesTapEvents) + && fillColor.equals(that.fillColor) + && geodesic.equals(that.geodesic) + && points.equals(that.points) + && holes.equals(that.holes) + && visible.equals(that.visible) + && strokeColor.equals(that.strokeColor) + && strokeWidth.equals(that.strokeWidth) + && zIndex.equals(that.zIndex); } @Override public int hashCode() { - return Objects.hash(polygonId, consumesTapEvents, fillColor, geodesic, points, holes, visible, strokeColor, strokeWidth, zIndex); + return Objects.hash( + polygonId, + consumesTapEvents, + fillColor, + geodesic, + points, + holes, + visible, + strokeColor, + strokeWidth, + zIndex); } public static final class Builder { @@ -2275,7 +2413,7 @@ ArrayList toList() { /** * Pigeon equivalent of the Polyline class. * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformPolyline { private @NonNull String polylineId; @@ -2372,8 +2510,8 @@ public void setPoints(@NonNull List setterArg) { } /** - * The cap at the start and end vertex of a polyline. - * See https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/Cap. + * The cap at the start and end vertex of a polyline. See + * https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/Cap. */ private @NonNull PlatformCap startCap; @@ -2445,15 +2583,42 @@ public void setZIndex(@NonNull Long setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformPolyline that = (PlatformPolyline) o; - return polylineId.equals(that.polylineId) && consumesTapEvents.equals(that.consumesTapEvents) && color.equals(that.color) && geodesic.equals(that.geodesic) && jointType.equals(that.jointType) && patterns.equals(that.patterns) && points.equals(that.points) && startCap.equals(that.startCap) && endCap.equals(that.endCap) && visible.equals(that.visible) && width.equals(that.width) && zIndex.equals(that.zIndex); + return polylineId.equals(that.polylineId) + && consumesTapEvents.equals(that.consumesTapEvents) + && color.equals(that.color) + && geodesic.equals(that.geodesic) + && jointType.equals(that.jointType) + && patterns.equals(that.patterns) + && points.equals(that.points) + && startCap.equals(that.startCap) + && endCap.equals(that.endCap) + && visible.equals(that.visible) + && width.equals(that.width) + && zIndex.equals(that.zIndex); } @Override public int hashCode() { - return Objects.hash(polylineId, consumesTapEvents, color, geodesic, jointType, patterns, points, startCap, endCap, visible, width, zIndex); + return Objects.hash( + polylineId, + consumesTapEvents, + color, + geodesic, + jointType, + patterns, + points, + startCap, + endCap, + visible, + width, + zIndex); } public static final class Builder { @@ -2624,7 +2789,7 @@ ArrayList toList() { * Pigeon equivalent of Cap from the platform interface. * https://github.com/flutter/packages/blob/main/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/cap.dart * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCap { private @NonNull PlatformCapType type; @@ -2665,10 +2830,16 @@ public void setRefWidth(@Nullable Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformCap that = (PlatformCap) o; - return type.equals(that.type) && Objects.equals(bitmapDescriptor, that.bitmapDescriptor) && Objects.equals(refWidth, that.refWidth); + return type.equals(that.type) + && Objects.equals(bitmapDescriptor, that.bitmapDescriptor) + && Objects.equals(refWidth, that.refWidth); } @Override @@ -2735,7 +2906,7 @@ ArrayList toList() { /** * Pigeon equivalent of the PatternItem class. * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformPatternItem { private @NonNull PlatformPatternItemType type; @@ -2766,8 +2937,12 @@ public void setLength(@Nullable Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformPatternItem that = (PlatformPatternItem) o; return type.equals(that.type) && Objects.equals(length, that.length); } @@ -2824,7 +2999,7 @@ ArrayList toList() { /** * Pigeon equivalent of the Tile class. * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformTile { private @NonNull Long width; @@ -2868,10 +3043,16 @@ public void setData(@Nullable byte[] setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformTile that = (PlatformTile) o; - return width.equals(that.width) && height.equals(that.height) && Arrays.equals(data, that.data); + return width.equals(that.width) + && height.equals(that.height) + && Arrays.equals(data, that.data); } @Override @@ -2940,7 +3121,7 @@ ArrayList toList() { /** * Pigeon equivalent of the TileOverlay class. * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformTileOverlay { private @NonNull String tileOverlayId; @@ -3026,10 +3207,19 @@ public void setTileSize(@NonNull Long setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformTileOverlay that = (PlatformTileOverlay) o; - return tileOverlayId.equals(that.tileOverlayId) && fadeIn.equals(that.fadeIn) && transparency.equals(that.transparency) && zIndex.equals(that.zIndex) && visible.equals(that.visible) && tileSize.equals(that.tileSize); + return tileOverlayId.equals(that.tileOverlayId) + && fadeIn.equals(that.fadeIn) + && transparency.equals(that.transparency) + && zIndex.equals(that.zIndex) + && visible.equals(that.visible) + && tileSize.equals(that.tileSize); } @Override @@ -3132,7 +3322,7 @@ ArrayList toList() { /** * Pigeon equivalent of Flutter's EdgeInsets. * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformEdgeInsets { private @NonNull Double top; @@ -3192,10 +3382,17 @@ public void setRight(@NonNull Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformEdgeInsets that = (PlatformEdgeInsets) o; - return top.equals(that.top) && bottom.equals(that.bottom) && left.equals(that.left) && right.equals(that.right); + return top.equals(that.top) + && bottom.equals(that.bottom) + && left.equals(that.left) + && right.equals(that.right); } @Override @@ -3274,7 +3471,7 @@ ArrayList toList() { /** * Pigeon equivalent of LatLng. * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformLatLng { private @NonNull Double latitude; @@ -3308,8 +3505,12 @@ public void setLongitude(@NonNull Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformLatLng that = (PlatformLatLng) o; return latitude.equals(that.latitude) && longitude.equals(that.longitude); } @@ -3366,7 +3567,7 @@ ArrayList toList() { /** * Pigeon equivalent of LatLngBounds. * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformLatLngBounds { private @NonNull PlatformLatLng northeast; @@ -3400,8 +3601,12 @@ public void setSouthwest(@NonNull PlatformLatLng setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformLatLngBounds that = (PlatformLatLngBounds) o; return northeast.equals(that.northeast) && southwest.equals(that.southwest); } @@ -3458,7 +3663,7 @@ ArrayList toList() { /** * Pigeon equivalent of Cluster. * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCluster { private @NonNull String clusterManagerId; @@ -3518,10 +3723,17 @@ public void setMarkerIds(@NonNull List setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformCluster that = (PlatformCluster) o; - return clusterManagerId.equals(that.clusterManagerId) && position.equals(that.position) && bounds.equals(that.bounds) && markerIds.equals(that.markerIds); + return clusterManagerId.equals(that.clusterManagerId) + && position.equals(that.position) + && bounds.equals(that.bounds) + && markerIds.equals(that.markerIds); } @Override @@ -3600,10 +3812,10 @@ ArrayList toList() { /** * Pigeon equivalent of CameraTargetBounds. * - * As with the Dart version, it exists to distinguish between not setting a - * a target, and having an explicitly unbounded target (null [bounds]). + *

As with the Dart version, it exists to distinguish between not setting a a target, and + * having an explicitly unbounded target (null [bounds]). * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformCameraTargetBounds { private @Nullable PlatformLatLngBounds bounds; @@ -3618,8 +3830,12 @@ public void setBounds(@Nullable PlatformLatLngBounds setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformCameraTargetBounds that = (PlatformCameraTargetBounds) o; return Objects.equals(bounds, that.bounds); } @@ -3664,7 +3880,7 @@ ArrayList toList() { /** * Information passed to the platform view creation. * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformMapViewCreationParams { private @NonNull PlatformCameraPosition initialCameraPosition; @@ -3789,15 +4005,36 @@ public void setInitialClusterManagers(@NonNull List sett @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformMapViewCreationParams that = (PlatformMapViewCreationParams) o; - return initialCameraPosition.equals(that.initialCameraPosition) && mapConfiguration.equals(that.mapConfiguration) && initialCircles.equals(that.initialCircles) && initialMarkers.equals(that.initialMarkers) && initialPolygons.equals(that.initialPolygons) && initialPolylines.equals(that.initialPolylines) && initialHeatmaps.equals(that.initialHeatmaps) && initialTileOverlays.equals(that.initialTileOverlays) && initialClusterManagers.equals(that.initialClusterManagers); + return initialCameraPosition.equals(that.initialCameraPosition) + && mapConfiguration.equals(that.mapConfiguration) + && initialCircles.equals(that.initialCircles) + && initialMarkers.equals(that.initialMarkers) + && initialPolygons.equals(that.initialPolygons) + && initialPolylines.equals(that.initialPolylines) + && initialHeatmaps.equals(that.initialHeatmaps) + && initialTileOverlays.equals(that.initialTileOverlays) + && initialClusterManagers.equals(that.initialClusterManagers); } @Override public int hashCode() { - return Objects.hash(initialCameraPosition, mapConfiguration, initialCircles, initialMarkers, initialPolygons, initialPolylines, initialHeatmaps, initialTileOverlays, initialClusterManagers); + return Objects.hash( + initialCameraPosition, + mapConfiguration, + initialCircles, + initialMarkers, + initialPolygons, + initialPolylines, + initialHeatmaps, + initialTileOverlays, + initialClusterManagers); } public static final class Builder { @@ -3869,7 +4106,8 @@ public static final class Builder { private @Nullable List initialClusterManagers; @CanIgnoreReturnValue - public @NonNull Builder setInitialClusterManagers(@NonNull List setterArg) { + public @NonNull Builder setInitialClusterManagers( + @NonNull List setterArg) { this.initialClusterManagers = setterArg; return this; } @@ -3904,7 +4142,8 @@ ArrayList toList() { return toListResult; } - static @NonNull PlatformMapViewCreationParams fromList(@NonNull ArrayList pigeonVar_list) { + static @NonNull PlatformMapViewCreationParams fromList( + @NonNull ArrayList pigeonVar_list) { PlatformMapViewCreationParams pigeonResult = new PlatformMapViewCreationParams(); Object initialCameraPosition = pigeonVar_list.get(0); pigeonResult.setInitialCameraPosition((PlatformCameraPosition) initialCameraPosition); @@ -3931,7 +4170,7 @@ ArrayList toList() { /** * Pigeon equivalent of MapConfiguration. * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformMapConfiguration { private @Nullable Boolean compassEnabled; @@ -4136,15 +4375,58 @@ public void setStyle(@Nullable String setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformMapConfiguration that = (PlatformMapConfiguration) o; - return Objects.equals(compassEnabled, that.compassEnabled) && Objects.equals(cameraTargetBounds, that.cameraTargetBounds) && Objects.equals(mapType, that.mapType) && Objects.equals(minMaxZoomPreference, that.minMaxZoomPreference) && Objects.equals(mapToolbarEnabled, that.mapToolbarEnabled) && Objects.equals(rotateGesturesEnabled, that.rotateGesturesEnabled) && Objects.equals(scrollGesturesEnabled, that.scrollGesturesEnabled) && Objects.equals(tiltGesturesEnabled, that.tiltGesturesEnabled) && Objects.equals(trackCameraPosition, that.trackCameraPosition) && Objects.equals(zoomControlsEnabled, that.zoomControlsEnabled) && Objects.equals(zoomGesturesEnabled, that.zoomGesturesEnabled) && Objects.equals(myLocationEnabled, that.myLocationEnabled) && Objects.equals(myLocationButtonEnabled, that.myLocationButtonEnabled) && Objects.equals(padding, that.padding) && Objects.equals(indoorViewEnabled, that.indoorViewEnabled) && Objects.equals(trafficEnabled, that.trafficEnabled) && Objects.equals(buildingsEnabled, that.buildingsEnabled) && Objects.equals(liteModeEnabled, that.liteModeEnabled) && Objects.equals(cloudMapId, that.cloudMapId) && Objects.equals(style, that.style); + return Objects.equals(compassEnabled, that.compassEnabled) + && Objects.equals(cameraTargetBounds, that.cameraTargetBounds) + && Objects.equals(mapType, that.mapType) + && Objects.equals(minMaxZoomPreference, that.minMaxZoomPreference) + && Objects.equals(mapToolbarEnabled, that.mapToolbarEnabled) + && Objects.equals(rotateGesturesEnabled, that.rotateGesturesEnabled) + && Objects.equals(scrollGesturesEnabled, that.scrollGesturesEnabled) + && Objects.equals(tiltGesturesEnabled, that.tiltGesturesEnabled) + && Objects.equals(trackCameraPosition, that.trackCameraPosition) + && Objects.equals(zoomControlsEnabled, that.zoomControlsEnabled) + && Objects.equals(zoomGesturesEnabled, that.zoomGesturesEnabled) + && Objects.equals(myLocationEnabled, that.myLocationEnabled) + && Objects.equals(myLocationButtonEnabled, that.myLocationButtonEnabled) + && Objects.equals(padding, that.padding) + && Objects.equals(indoorViewEnabled, that.indoorViewEnabled) + && Objects.equals(trafficEnabled, that.trafficEnabled) + && Objects.equals(buildingsEnabled, that.buildingsEnabled) + && Objects.equals(liteModeEnabled, that.liteModeEnabled) + && Objects.equals(cloudMapId, that.cloudMapId) + && Objects.equals(style, that.style); } @Override public int hashCode() { - return Objects.hash(compassEnabled, cameraTargetBounds, mapType, minMaxZoomPreference, mapToolbarEnabled, rotateGesturesEnabled, scrollGesturesEnabled, tiltGesturesEnabled, trackCameraPosition, zoomControlsEnabled, zoomGesturesEnabled, myLocationEnabled, myLocationButtonEnabled, padding, indoorViewEnabled, trafficEnabled, buildingsEnabled, liteModeEnabled, cloudMapId, style); + return Objects.hash( + compassEnabled, + cameraTargetBounds, + mapType, + minMaxZoomPreference, + mapToolbarEnabled, + rotateGesturesEnabled, + scrollGesturesEnabled, + tiltGesturesEnabled, + trackCameraPosition, + zoomControlsEnabled, + zoomGesturesEnabled, + myLocationEnabled, + myLocationButtonEnabled, + padding, + indoorViewEnabled, + trafficEnabled, + buildingsEnabled, + liteModeEnabled, + cloudMapId, + style); } public static final class Builder { @@ -4160,7 +4442,8 @@ public static final class Builder { private @Nullable PlatformCameraTargetBounds cameraTargetBounds; @CanIgnoreReturnValue - public @NonNull Builder setCameraTargetBounds(@Nullable PlatformCameraTargetBounds setterArg) { + public @NonNull Builder setCameraTargetBounds( + @Nullable PlatformCameraTargetBounds setterArg) { this.cameraTargetBounds = setterArg; return this; } @@ -4410,7 +4693,7 @@ ArrayList toList() { /** * Pigeon representation of an x,y coordinate. * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformPoint { private @NonNull Long x; @@ -4444,8 +4727,12 @@ public void setY(@NonNull Long setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformPoint that = (PlatformPoint) o; return x.equals(that.x) && y.equals(that.y); } @@ -4502,7 +4789,7 @@ ArrayList toList() { /** * Pigeon equivalent of native TileOverlay properties. * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformTileLayer { private @NonNull Boolean visible; @@ -4562,10 +4849,17 @@ public void setZIndex(@NonNull Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformTileLayer that = (PlatformTileLayer) o; - return visible.equals(that.visible) && fadeIn.equals(that.fadeIn) && transparency.equals(that.transparency) && zIndex.equals(that.zIndex); + return visible.equals(that.visible) + && fadeIn.equals(that.fadeIn) + && transparency.equals(that.transparency) + && zIndex.equals(that.zIndex); } @Override @@ -4644,7 +4938,7 @@ ArrayList toList() { /** * Possible outcomes of launching a URL. * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformZoomRange { private @Nullable Double min; @@ -4669,8 +4963,12 @@ public void setMax(@Nullable Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformZoomRange that = (PlatformZoomRange) o; return Objects.equals(min, that.min) && Objects.equals(max, that.max); } @@ -4725,20 +5023,18 @@ ArrayList toList() { } /** - * Pigeon equivalent of [BitmapDescriptor]. As there are multiple disjoint - * types of [BitmapDescriptor], [PlatformBitmap] contains a single field which - * may hold the pigeon equivalent type of any of them. + * Pigeon equivalent of [BitmapDescriptor]. As there are multiple disjoint types of + * [BitmapDescriptor], [PlatformBitmap] contains a single field which may hold the pigeon + * equivalent type of any of them. * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformBitmap { /** - * One of [PlatformBitmapAssetMap], [PlatformBitmapAsset], - * [PlatformBitmapAssetImage], [PlatformBitmapBytesMap], - * [PlatformBitmapBytes], or [PlatformBitmapDefaultMarker]. - * As Pigeon does not currently support data class inheritance, this - * approach allows for the different bitmap implementations to be valid - * argument and return types of the API methods. See + * One of [PlatformBitmapAssetMap], [PlatformBitmapAsset], [PlatformBitmapAssetImage], + * [PlatformBitmapBytesMap], [PlatformBitmapBytes], or [PlatformBitmapDefaultMarker]. As Pigeon + * does not currently support data class inheritance, this approach allows for the different + * bitmap implementations to be valid argument and return types of the API methods. See * https://github.com/flutter/flutter/issues/117819. */ private @NonNull Object bitmap; @@ -4759,8 +5055,12 @@ public void setBitmap(@NonNull Object setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformBitmap that = (PlatformBitmap) o; return bitmap.equals(that.bitmap); } @@ -4806,7 +5106,7 @@ ArrayList toList() { * Pigeon equivalent of [DefaultMarker]. See * https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/BitmapDescriptorFactory#defaultMarker(float) * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformBitmapDefaultMarker { private @Nullable Double hue; @@ -4821,8 +5121,12 @@ public void setHue(@Nullable Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformBitmapDefaultMarker that = (PlatformBitmapDefaultMarker) o; return Objects.equals(hue, that.hue); } @@ -4856,7 +5160,8 @@ ArrayList toList() { return toListResult; } - static @NonNull PlatformBitmapDefaultMarker fromList(@NonNull ArrayList pigeonVar_list) { + static @NonNull PlatformBitmapDefaultMarker fromList( + @NonNull ArrayList pigeonVar_list) { PlatformBitmapDefaultMarker pigeonResult = new PlatformBitmapDefaultMarker(); Object hue = pigeonVar_list.get(0); pigeonResult.setHue((Double) hue); @@ -4868,7 +5173,7 @@ ArrayList toList() { * Pigeon equivalent of [BytesBitmap]. See * https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/BitmapDescriptorFactory#fromBitmap(android.graphics.Bitmap) * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformBitmapBytes { private @NonNull byte[] byteData; @@ -4899,8 +5204,12 @@ public void setSize(@Nullable PlatformDoublePair setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformBitmapBytes that = (PlatformBitmapBytes) o; return Arrays.equals(byteData, that.byteData) && Objects.equals(size, that.size); } @@ -4960,7 +5269,7 @@ ArrayList toList() { * Pigeon equivalent of [AssetBitmap]. See * https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/BitmapDescriptorFactory#public-static-bitmapdescriptor-fromasset-string-assetname * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformBitmapAsset { private @NonNull String name; @@ -4991,8 +5300,12 @@ public void setPkg(@Nullable String setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformBitmapAsset that = (PlatformBitmapAsset) o; return name.equals(that.name) && Objects.equals(pkg, that.pkg); } @@ -5050,7 +5363,7 @@ ArrayList toList() { * Pigeon equivalent of [AssetImageBitmap]. See * https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/BitmapDescriptorFactory#public-static-bitmapdescriptor-fromasset-string-assetname * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformBitmapAssetImage { private @NonNull String name; @@ -5094,8 +5407,12 @@ public void setSize(@Nullable PlatformDoublePair setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformBitmapAssetImage that = (PlatformBitmapAssetImage) o; return name.equals(that.name) && scale.equals(that.scale) && Objects.equals(size, that.size); } @@ -5165,7 +5482,7 @@ ArrayList toList() { * Pigeon equivalent of [AssetMapBitmap]. See * https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/BitmapDescriptorFactory#public-static-bitmapdescriptor-fromasset-string-assetname * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformBitmapAssetMap { private @NonNull String assetName; @@ -5232,10 +5549,18 @@ public void setHeight(@Nullable Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformBitmapAssetMap that = (PlatformBitmapAssetMap) o; - return assetName.equals(that.assetName) && bitmapScaling.equals(that.bitmapScaling) && imagePixelRatio.equals(that.imagePixelRatio) && Objects.equals(width, that.width) && Objects.equals(height, that.height); + return assetName.equals(that.assetName) + && bitmapScaling.equals(that.bitmapScaling) + && imagePixelRatio.equals(that.imagePixelRatio) + && Objects.equals(width, that.width) + && Objects.equals(height, that.height); } @Override @@ -5327,7 +5652,7 @@ ArrayList toList() { * Pigeon equivalent of [BytesMapBitmap]. See * https://developers.google.com/maps/documentation/android-sdk/reference/com/google/android/libraries/maps/model/BitmapDescriptorFactory#public-static-bitmapdescriptor-frombitmap-bitmap-image * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformBitmapBytesMap { private @NonNull byte[] byteData; @@ -5394,10 +5719,18 @@ public void setHeight(@Nullable Double setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformBitmapBytesMap that = (PlatformBitmapBytesMap) o; - return Arrays.equals(byteData, that.byteData) && bitmapScaling.equals(that.bitmapScaling) && imagePixelRatio.equals(that.imagePixelRatio) && Objects.equals(width, that.width) && Objects.equals(height, that.height); + return Arrays.equals(byteData, that.byteData) + && bitmapScaling.equals(that.bitmapScaling) + && imagePixelRatio.equals(that.imagePixelRatio) + && Objects.equals(width, that.width) + && Objects.equals(height, that.height); } @Override @@ -5490,7 +5823,7 @@ ArrayList toList() { /** * Pigeon equivalent of a registered bitmap. * - * Generated class from Pigeon that represents data sent in messages. + *

Generated class from Pigeon that represents data sent in messages. */ public static final class PlatformBitmapRegisteredMapBitmap { private @NonNull Long id; @@ -5511,8 +5844,12 @@ public void setId(@NonNull Long setterArg) { @Override public boolean equals(Object o) { - if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { return false; } + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } PlatformBitmapRegisteredMapBitmap that = (PlatformBitmapRegisteredMapBitmap) o; return id.equals(that.id); } @@ -5546,7 +5883,8 @@ ArrayList toList() { return toListResult; } - static @NonNull PlatformBitmapRegisteredMapBitmap fromList(@NonNull ArrayList pigeonVar_list) { + static @NonNull PlatformBitmapRegisteredMapBitmap fromList( + @NonNull ArrayList pigeonVar_list) { PlatformBitmapRegisteredMapBitmap pigeonResult = new PlatformBitmapRegisteredMapBitmap(); Object id = pigeonVar_list.get(0); pigeonResult.setId((Long) id); @@ -5562,40 +5900,52 @@ private PigeonCodec() {} @Override protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) { switch (type) { - case (byte) 129: { - Object value = readValue(buffer); - return value == null ? null : PlatformMapType.values()[((Long) value).intValue()]; - } - case (byte) 130: { - Object value = readValue(buffer); - return value == null ? null : PlatformRendererType.values()[((Long) value).intValue()]; - } - case (byte) 131: { - Object value = readValue(buffer); - return value == null ? null : PlatformJointType.values()[((Long) value).intValue()]; - } - case (byte) 132: { - Object value = readValue(buffer); - return value == null ? null : PlatformCapType.values()[((Long) value).intValue()]; - } - case (byte) 133: { - Object value = readValue(buffer); - return value == null ? null : PlatformPatternItemType.values()[((Long) value).intValue()]; - } - case (byte) 134: { - Object value = readValue(buffer); - return value == null ? null : PlatformMapBitmapScaling.values()[((Long) value).intValue()]; - } + case (byte) 129: + { + Object value = readValue(buffer); + return value == null ? null : PlatformMapType.values()[((Long) value).intValue()]; + } + case (byte) 130: + { + Object value = readValue(buffer); + return value == null ? null : PlatformRendererType.values()[((Long) value).intValue()]; + } + case (byte) 131: + { + Object value = readValue(buffer); + return value == null ? null : PlatformJointType.values()[((Long) value).intValue()]; + } + case (byte) 132: + { + Object value = readValue(buffer); + return value == null ? null : PlatformCapType.values()[((Long) value).intValue()]; + } + case (byte) 133: + { + Object value = readValue(buffer); + return value == null + ? null + : PlatformPatternItemType.values()[((Long) value).intValue()]; + } + case (byte) 134: + { + Object value = readValue(buffer); + return value == null + ? null + : PlatformMapBitmapScaling.values()[((Long) value).intValue()]; + } case (byte) 135: return PlatformCameraPosition.fromList((ArrayList) readValue(buffer)); case (byte) 136: return PlatformCameraUpdate.fromList((ArrayList) readValue(buffer)); case (byte) 137: - return PlatformCameraUpdateNewCameraPosition.fromList((ArrayList) readValue(buffer)); + return PlatformCameraUpdateNewCameraPosition.fromList( + (ArrayList) readValue(buffer)); case (byte) 138: return PlatformCameraUpdateNewLatLng.fromList((ArrayList) readValue(buffer)); case (byte) 139: - return PlatformCameraUpdateNewLatLngBounds.fromList((ArrayList) readValue(buffer)); + return PlatformCameraUpdateNewLatLngBounds.fromList( + (ArrayList) readValue(buffer)); case (byte) 140: return PlatformCameraUpdateNewLatLngZoom.fromList((ArrayList) readValue(buffer)); case (byte) 141: @@ -5817,7 +6167,6 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { } } - /** Asynchronous error handling return type for non-nullable API method returns. */ public interface Result { /** Success case callback method for handling returns. */ @@ -5845,9 +6194,9 @@ public interface VoidResult { /** * Interface for non-test interactions with the native SDK. * - * For test-only state queries, see [MapsInspectorApi]. + *

For test-only state queries, see [MapsInspectorApi]. * - * Generated interface from Pigeon that represents a handler of messages from Flutter. + *

Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface MapsApi { /** Returns once the map instance is available. */ @@ -5855,70 +6204,82 @@ public interface MapsApi { /** * Updates the map's configuration options. * - * Only non-null configuration values will result in updates; options with - * null values will remain unchanged. + *

Only non-null configuration values will result in updates; options with null values will + * remain unchanged. */ void updateMapConfiguration(@NonNull PlatformMapConfiguration configuration); /** Updates the set of circles on the map. */ - void updateCircles(@NonNull List toAdd, @NonNull List toChange, @NonNull List idsToRemove); + void updateCircles( + @NonNull List toAdd, + @NonNull List toChange, + @NonNull List idsToRemove); /** Updates the set of heatmaps on the map. */ - void updateHeatmaps(@NonNull List toAdd, @NonNull List toChange, @NonNull List idsToRemove); + void updateHeatmaps( + @NonNull List toAdd, + @NonNull List toChange, + @NonNull List idsToRemove); /** Updates the set of custer managers for clusters on the map. */ - void updateClusterManagers(@NonNull List toAdd, @NonNull List idsToRemove); + void updateClusterManagers( + @NonNull List toAdd, @NonNull List idsToRemove); /** Updates the set of markers on the map. */ - void updateMarkers(@NonNull List toAdd, @NonNull List toChange, @NonNull List idsToRemove); + void updateMarkers( + @NonNull List toAdd, + @NonNull List toChange, + @NonNull List idsToRemove); /** Updates the set of polygonss on the map. */ - void updatePolygons(@NonNull List toAdd, @NonNull List toChange, @NonNull List idsToRemove); + void updatePolygons( + @NonNull List toAdd, + @NonNull List toChange, + @NonNull List idsToRemove); /** Updates the set of polylines on the map. */ - void updatePolylines(@NonNull List toAdd, @NonNull List toChange, @NonNull List idsToRemove); + void updatePolylines( + @NonNull List toAdd, + @NonNull List toChange, + @NonNull List idsToRemove); /** Updates the set of tile overlays on the map. */ - void updateTileOverlays(@NonNull List toAdd, @NonNull List toChange, @NonNull List idsToRemove); + void updateTileOverlays( + @NonNull List toAdd, + @NonNull List toChange, + @NonNull List idsToRemove); /** Gets the screen coordinate for the given map location. */ - @NonNull + @NonNull PlatformPoint getScreenCoordinate(@NonNull PlatformLatLng latLng); /** Gets the map location for the given screen coordinate. */ - @NonNull + @NonNull PlatformLatLng getLatLng(@NonNull PlatformPoint screenCoordinate); /** Gets the map region currently displayed on the map. */ - @NonNull + @NonNull PlatformLatLngBounds getVisibleRegion(); - /** - * Moves the camera according to [cameraUpdate] immediately, with no - * animation. - */ + /** Moves the camera according to [cameraUpdate] immediately, with no animation. */ void moveCamera(@NonNull PlatformCameraUpdate cameraUpdate); /** Moves the camera according to [cameraUpdate], animating the update. */ void animateCamera(@NonNull PlatformCameraUpdate cameraUpdate); /** Gets the current map zoom level. */ - @NonNull + @NonNull Double getZoomLevel(); /** Show the info window for the marker with the given ID. */ void showInfoWindow(@NonNull String markerId); /** Hide the info window for the marker with the given ID. */ void hideInfoWindow(@NonNull String markerId); - /** - * Returns true if the marker with the given ID is currently displaying its - * info window. - */ - @NonNull + /** Returns true if the marker with the given ID is currently displaying its info window. */ + @NonNull Boolean isInfoWindowShown(@NonNull String markerId); /** - * Sets the style to the given map style string, where an empty string - * indicates that the style should be cleared. + * Sets the style to the given map style string, where an empty string indicates that the style + * should be cleared. * - * Returns false if there was an error setting the style, such as an invalid - * style string. + *

Returns false if there was an error setting the style, such as an invalid style string. */ - @NonNull + @NonNull Boolean setStyle(@NonNull String style); /** - * Returns true if the last attempt to set a style, either via initial map - * style or setMapStyle, succeeded. + * Returns true if the last attempt to set a style, either via initial map style or setMapStyle, + * succeeded. * - * This allows checking asynchronously for initial style failures, as there - * is no way to return failures from map initialization. + *

This allows checking asynchronously for initial style failures, as there is no way to + * return failures from map initialization. */ - @NonNull + @NonNull Boolean didLastStyleSucceed(); /** Clears the cache of tiles previously requseted from the tile provider. */ void clearTileCache(@NonNull String tileOverlayId); @@ -5929,16 +6290,23 @@ public interface MapsApi { static @NonNull MessageCodec getCodec() { return PigeonCodec.INSTANCE; } - /**Sets up an instance of `MapsApi` to handle messages through the `binaryMessenger`. */ + /** Sets up an instance of `MapsApi` to handle messages through the `binaryMessenger`. */ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable MapsApi api) { setUp(binaryMessenger, "", api); } - static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String messageChannelSuffix, @Nullable MapsApi api) { + + static void setUp( + @NonNull BinaryMessenger binaryMessenger, + @NonNull String messageChannelSuffix, + @Nullable MapsApi api) { messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.waitForMap" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.waitForMap" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -5965,7 +6333,10 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateMapConfiguration" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateMapConfiguration" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -5975,8 +6346,7 @@ public void error(Throwable error) { try { api.updateMapConfiguration(configurationArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -5988,7 +6358,10 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateCircles" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateCircles" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6000,8 +6373,7 @@ public void error(Throwable error) { try { api.updateCircles(toAddArg, toChangeArg, idsToRemoveArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6013,7 +6385,10 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateHeatmaps" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateHeatmaps" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6025,8 +6400,7 @@ public void error(Throwable error) { try { api.updateHeatmaps(toAddArg, toChangeArg, idsToRemoveArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6038,7 +6412,10 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateClusterManagers" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateClusterManagers" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6049,8 +6426,7 @@ public void error(Throwable error) { try { api.updateClusterManagers(toAddArg, idsToRemoveArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6062,7 +6438,10 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateMarkers" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateMarkers" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6074,8 +6453,7 @@ public void error(Throwable error) { try { api.updateMarkers(toAddArg, toChangeArg, idsToRemoveArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6087,7 +6465,10 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updatePolygons" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updatePolygons" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6099,8 +6480,7 @@ public void error(Throwable error) { try { api.updatePolygons(toAddArg, toChangeArg, idsToRemoveArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6112,7 +6492,10 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updatePolylines" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updatePolylines" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6124,8 +6507,7 @@ public void error(Throwable error) { try { api.updatePolylines(toAddArg, toChangeArg, idsToRemoveArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6137,7 +6519,10 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateTileOverlays" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateTileOverlays" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6149,8 +6534,7 @@ public void error(Throwable error) { try { api.updateTileOverlays(toAddArg, toChangeArg, idsToRemoveArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6162,7 +6546,10 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getScreenCoordinate" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getScreenCoordinate" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6172,8 +6559,7 @@ public void error(Throwable error) { try { PlatformPoint output = api.getScreenCoordinate(latLngArg); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6185,7 +6571,10 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getLatLng" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getLatLng" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6195,8 +6584,7 @@ public void error(Throwable error) { try { PlatformLatLng output = api.getLatLng(screenCoordinateArg); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6208,7 +6596,10 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getVisibleRegion" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getVisibleRegion" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6216,8 +6607,7 @@ public void error(Throwable error) { try { PlatformLatLngBounds output = api.getVisibleRegion(); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6229,7 +6619,10 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.moveCamera" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.moveCamera" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6239,8 +6632,7 @@ public void error(Throwable error) { try { api.moveCamera(cameraUpdateArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6252,7 +6644,10 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.animateCamera" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.animateCamera" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6262,8 +6657,7 @@ public void error(Throwable error) { try { api.animateCamera(cameraUpdateArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6275,7 +6669,10 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getZoomLevel" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getZoomLevel" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6283,8 +6680,7 @@ public void error(Throwable error) { try { Double output = api.getZoomLevel(); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6296,7 +6692,10 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.showInfoWindow" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.showInfoWindow" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6306,8 +6705,7 @@ public void error(Throwable error) { try { api.showInfoWindow(markerIdArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6319,7 +6717,10 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.hideInfoWindow" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.hideInfoWindow" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6329,8 +6730,7 @@ public void error(Throwable error) { try { api.hideInfoWindow(markerIdArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6342,7 +6742,10 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.isInfoWindowShown" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.isInfoWindowShown" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6352,8 +6755,7 @@ public void error(Throwable error) { try { Boolean output = api.isInfoWindowShown(markerIdArg); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6365,7 +6767,10 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.setStyle" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.setStyle" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6375,8 +6780,7 @@ public void error(Throwable error) { try { Boolean output = api.setStyle(styleArg); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6388,7 +6792,10 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.didLastStyleSucceed" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.didLastStyleSucceed" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6396,8 +6803,7 @@ public void error(Throwable error) { try { Boolean output = api.didLastStyleSucceed(); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6409,7 +6815,10 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.clearTileCache" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.clearTileCache" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6419,8 +6828,7 @@ public void error(Throwable error) { try { api.clearTileCache(tileOverlayIdArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6432,7 +6840,10 @@ public void error(Throwable error) { { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.takeSnapshot" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsApi.takeSnapshot" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6466,368 +6877,439 @@ public static class MapsCallbackApi { public MapsCallbackApi(@NonNull BinaryMessenger argBinaryMessenger) { this(argBinaryMessenger, ""); } - public MapsCallbackApi(@NonNull BinaryMessenger argBinaryMessenger, @NonNull String messageChannelSuffix) { + + public MapsCallbackApi( + @NonNull BinaryMessenger argBinaryMessenger, @NonNull String messageChannelSuffix) { this.binaryMessenger = argBinaryMessenger; this.messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; } - /** - * Public interface for sending reply. - * The codec used by MapsCallbackApi. - */ + /** Public interface for sending reply. The codec used by MapsCallbackApi. */ static @NonNull MessageCodec getCodec() { return PigeonCodec.INSTANCE; } /** Called when the map camera starts moving. */ public void onCameraMoveStarted(@NonNull VoidResult result) { - final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraMoveStarted" + messageChannelSuffix; + final String channelName = + "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraMoveStarted" + + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); channel.send( null, channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error( + new FlutterError( + (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when the map camera moves. */ - public void onCameraMove(@NonNull PlatformCameraPosition cameraPositionArg, @NonNull VoidResult result) { - final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraMove" + messageChannelSuffix; + public void onCameraMove( + @NonNull PlatformCameraPosition cameraPositionArg, @NonNull VoidResult result) { + final String channelName = + "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraMove" + + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Collections.singletonList(cameraPositionArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error( + new FlutterError( + (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when the map camera stops moving. */ public void onCameraIdle(@NonNull VoidResult result) { - final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraIdle" + messageChannelSuffix; + final String channelName = + "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraIdle" + + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); channel.send( null, channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error( + new FlutterError( + (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when the map, not a specifc map object, is tapped. */ public void onTap(@NonNull PlatformLatLng positionArg, @NonNull VoidResult result) { - final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onTap" + messageChannelSuffix; + final String channelName = + "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onTap" + + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Collections.singletonList(positionArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error( + new FlutterError( + (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when the map, not a specifc map object, is long pressed. */ public void onLongPress(@NonNull PlatformLatLng positionArg, @NonNull VoidResult result) { - final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onLongPress" + messageChannelSuffix; + final String channelName = + "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onLongPress" + + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Collections.singletonList(positionArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error( + new FlutterError( + (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when a marker is tapped. */ public void onMarkerTap(@NonNull String markerIdArg, @NonNull VoidResult result) { - final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerTap" + messageChannelSuffix; + final String channelName = + "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerTap" + + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Collections.singletonList(markerIdArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error( + new FlutterError( + (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when a marker drag starts. */ - public void onMarkerDragStart(@NonNull String markerIdArg, @NonNull PlatformLatLng positionArg, @NonNull VoidResult result) { - final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDragStart" + messageChannelSuffix; + public void onMarkerDragStart( + @NonNull String markerIdArg, + @NonNull PlatformLatLng positionArg, + @NonNull VoidResult result) { + final String channelName = + "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDragStart" + + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Arrays.asList(markerIdArg, positionArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error( + new FlutterError( + (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when a marker drag updates. */ - public void onMarkerDrag(@NonNull String markerIdArg, @NonNull PlatformLatLng positionArg, @NonNull VoidResult result) { - final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDrag" + messageChannelSuffix; + public void onMarkerDrag( + @NonNull String markerIdArg, + @NonNull PlatformLatLng positionArg, + @NonNull VoidResult result) { + final String channelName = + "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDrag" + + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Arrays.asList(markerIdArg, positionArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error( + new FlutterError( + (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when a marker drag ends. */ - public void onMarkerDragEnd(@NonNull String markerIdArg, @NonNull PlatformLatLng positionArg, @NonNull VoidResult result) { - final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDragEnd" + messageChannelSuffix; + public void onMarkerDragEnd( + @NonNull String markerIdArg, + @NonNull PlatformLatLng positionArg, + @NonNull VoidResult result) { + final String channelName = + "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDragEnd" + + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Arrays.asList(markerIdArg, positionArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error( + new FlutterError( + (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when a marker's info window is tapped. */ public void onInfoWindowTap(@NonNull String markerIdArg, @NonNull VoidResult result) { - final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onInfoWindowTap" + messageChannelSuffix; + final String channelName = + "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onInfoWindowTap" + + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Collections.singletonList(markerIdArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error( + new FlutterError( + (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when a circle is tapped. */ public void onCircleTap(@NonNull String circleIdArg, @NonNull VoidResult result) { - final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCircleTap" + messageChannelSuffix; + final String channelName = + "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCircleTap" + + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Collections.singletonList(circleIdArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error( + new FlutterError( + (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when a marker cluster is tapped. */ public void onClusterTap(@NonNull PlatformCluster clusterArg, @NonNull VoidResult result) { - final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onClusterTap" + messageChannelSuffix; + final String channelName = + "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onClusterTap" + + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Collections.singletonList(clusterArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error( + new FlutterError( + (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when a polygon is tapped. */ public void onPolygonTap(@NonNull String polygonIdArg, @NonNull VoidResult result) { - final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onPolygonTap" + messageChannelSuffix; + final String channelName = + "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onPolygonTap" + + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Collections.singletonList(polygonIdArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error( + new FlutterError( + (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called when a polyline is tapped. */ public void onPolylineTap(@NonNull String polylineIdArg, @NonNull VoidResult result) { - final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onPolylineTap" + messageChannelSuffix; + final String channelName = + "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onPolylineTap" + + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Collections.singletonList(polylineIdArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error( + new FlutterError( + (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else { result.success(); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } /** Called to get data for a map tile. */ - public void getTileOverlayTile(@NonNull String tileOverlayIdArg, @NonNull PlatformPoint locationArg, @NonNull Long zoomArg, @NonNull Result result) { - final String channelName = "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.getTileOverlayTile" + messageChannelSuffix; + public void getTileOverlayTile( + @NonNull String tileOverlayIdArg, + @NonNull PlatformPoint locationArg, + @NonNull Long zoomArg, + @NonNull Result result) { + final String channelName = + "dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.getTileOverlayTile" + + messageChannelSuffix; BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, channelName, getCodec()); + new BasicMessageChannel<>(binaryMessenger, channelName, getCodec()); channel.send( new ArrayList<>(Arrays.asList(tileOverlayIdArg, locationArg, zoomArg)), channelReply -> { if (channelReply instanceof List) { List listReply = (List) channelReply; if (listReply.size() > 1) { - result.error(new FlutterError((String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); + result.error( + new FlutterError( + (String) listReply.get(0), (String) listReply.get(1), listReply.get(2))); } else if (listReply.get(0) == null) { - result.error(new FlutterError("null-error", "Flutter api returned null value for non-null return value.", "")); + result.error( + new FlutterError( + "null-error", + "Flutter api returned null value for non-null return value.", + "")); } else { @SuppressWarnings("ConstantConditions") PlatformTile output = (PlatformTile) listReply.get(0); result.success(output); } - } else { + } else { result.error(createConnectionError(channelName)); - } + } }); } } /** * Interface for global SDK initialization. * - * Generated interface from Pigeon that represents a handler of messages from Flutter. + *

Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface MapsInitializerApi { /** * Initializes the Google Maps SDK with the given renderer preference. * - * A null renderer preference will result in the default renderer. + *

A null renderer preference will result in the default renderer. * - * Calling this more than once in the lifetime of an application will result - * in an error. + *

Calling this more than once in the lifetime of an application will result in an error. */ - void initializeWithPreferredRenderer(@Nullable PlatformRendererType type, @NonNull Result result); + void initializeWithPreferredRenderer( + @Nullable PlatformRendererType type, @NonNull Result result); /** The codec used by MapsInitializerApi. */ static @NonNull MessageCodec getCodec() { return PigeonCodec.INSTANCE; } - /**Sets up an instance of `MapsInitializerApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `MapsInitializerApi` to handle messages through the `binaryMessenger`. + */ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable MapsInitializerApi api) { setUp(binaryMessenger, "", api); } - static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String messageChannelSuffix, @Nullable MapsInitializerApi api) { + + static void setUp( + @NonNull BinaryMessenger binaryMessenger, + @NonNull String messageChannelSuffix, + @Nullable MapsInitializerApi api) { messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInitializerApi.initializeWithPreferredRenderer" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsInitializerApi.initializeWithPreferredRenderer" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6856,11 +7338,10 @@ public void error(Throwable error) { } } /** - * Dummy interface to force generation of the platform view creation params, - * which are not used in any Pigeon calls, only the platform view creation - * call made internally by Flutter. + * Dummy interface to force generation of the platform view creation params, which are not used in + * any Pigeon calls, only the platform view creation call made internally by Flutter. * - * Generated interface from Pigeon that represents a handler of messages from Flutter. + *

Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface MapsPlatformViewApi { @@ -6870,16 +7351,26 @@ public interface MapsPlatformViewApi { static @NonNull MessageCodec getCodec() { return PigeonCodec.INSTANCE; } - /**Sets up an instance of `MapsPlatformViewApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `MapsPlatformViewApi` to handle messages through the + * `binaryMessenger`. + */ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable MapsPlatformViewApi api) { setUp(binaryMessenger, "", api); } - static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String messageChannelSuffix, @Nullable MapsPlatformViewApi api) { + + static void setUp( + @NonNull BinaryMessenger binaryMessenger, + @NonNull String messageChannelSuffix, + @Nullable MapsPlatformViewApi api) { messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsPlatformViewApi.createView" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsPlatformViewApi.createView" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6889,8 +7380,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess try { api.createView(typeArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6904,66 +7394,75 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess /** * Inspector API only intended for use in integration tests. * - * Generated interface from Pigeon that represents a handler of messages from Flutter. + *

Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface MapsInspectorApi { - @NonNull + @NonNull Boolean areBuildingsEnabled(); - @NonNull + @NonNull Boolean areRotateGesturesEnabled(); - @NonNull + @NonNull Boolean areZoomControlsEnabled(); - @NonNull + @NonNull Boolean areScrollGesturesEnabled(); - @NonNull + @NonNull Boolean areTiltGesturesEnabled(); - @NonNull + @NonNull Boolean areZoomGesturesEnabled(); - @NonNull + @NonNull Boolean isCompassEnabled(); - @Nullable + @Nullable Boolean isLiteModeEnabled(); - @NonNull + @NonNull Boolean isMapToolbarEnabled(); - @NonNull + @NonNull Boolean isMyLocationButtonEnabled(); - @NonNull + @NonNull Boolean isTrafficEnabled(); - @Nullable + @Nullable PlatformTileLayer getTileOverlayInfo(@NonNull String tileOverlayId); - @NonNull + @NonNull PlatformZoomRange getZoomRange(); - @NonNull + @NonNull List getClusters(@NonNull String clusterManagerId); /** The codec used by MapsInspectorApi. */ static @NonNull MessageCodec getCodec() { return PigeonCodec.INSTANCE; } - /**Sets up an instance of `MapsInspectorApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `MapsInspectorApi` to handle messages through the `binaryMessenger`. + */ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable MapsInspectorApi api) { setUp(binaryMessenger, "", api); } - static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String messageChannelSuffix, @Nullable MapsInspectorApi api) { + + static void setUp( + @NonNull BinaryMessenger binaryMessenger, + @NonNull String messageChannelSuffix, + @Nullable MapsInspectorApi api) { messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areBuildingsEnabled" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areBuildingsEnabled" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6971,8 +7470,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess try { Boolean output = api.areBuildingsEnabled(); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -6984,7 +7482,10 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areRotateGesturesEnabled" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areRotateGesturesEnabled" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -6992,8 +7493,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess try { Boolean output = api.areRotateGesturesEnabled(); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7005,7 +7505,10 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areZoomControlsEnabled" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areZoomControlsEnabled" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7013,8 +7516,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess try { Boolean output = api.areZoomControlsEnabled(); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7026,7 +7528,10 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areScrollGesturesEnabled" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areScrollGesturesEnabled" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7034,8 +7539,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess try { Boolean output = api.areScrollGesturesEnabled(); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7047,7 +7551,10 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areTiltGesturesEnabled" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areTiltGesturesEnabled" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7055,8 +7562,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess try { Boolean output = api.areTiltGesturesEnabled(); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7068,7 +7574,10 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areZoomGesturesEnabled" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areZoomGesturesEnabled" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7076,8 +7585,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess try { Boolean output = api.areZoomGesturesEnabled(); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7089,7 +7597,10 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isCompassEnabled" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isCompassEnabled" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7097,8 +7608,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess try { Boolean output = api.isCompassEnabled(); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7110,7 +7620,10 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isLiteModeEnabled" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isLiteModeEnabled" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7118,8 +7631,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess try { Boolean output = api.isLiteModeEnabled(); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7131,7 +7643,10 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isMapToolbarEnabled" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isMapToolbarEnabled" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7139,8 +7654,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess try { Boolean output = api.isMapToolbarEnabled(); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7152,7 +7666,10 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isMyLocationButtonEnabled" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isMyLocationButtonEnabled" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7160,8 +7677,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess try { Boolean output = api.isMyLocationButtonEnabled(); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7173,7 +7689,10 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isTrafficEnabled" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isTrafficEnabled" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7181,8 +7700,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess try { Boolean output = api.isTrafficEnabled(); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7194,7 +7712,10 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.getTileOverlayInfo" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.getTileOverlayInfo" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7204,8 +7725,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess try { PlatformTileLayer output = api.getTileOverlayInfo(tileOverlayIdArg); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7217,7 +7737,10 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.getZoomRange" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.getZoomRange" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7225,8 +7748,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess try { PlatformZoomRange output = api.getZoomRange(); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7238,7 +7760,10 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.getClusters" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.getClusters" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7248,8 +7773,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess try { List output = api.getClusters(clusterManagerIdArg); wrapped.add(0, output); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7263,7 +7787,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess /** * API for interacting with the image registry. * - * Generated interface from Pigeon that represents a handler of messages from Flutter. + *

Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface ImageRegistryApi { /** Adds a bitmap to the cache. */ @@ -7277,16 +7801,25 @@ public interface ImageRegistryApi { static @NonNull MessageCodec getCodec() { return PigeonCodec.INSTANCE; } - /**Sets up an instance of `ImageRegistryApi` to handle messages through the `binaryMessenger`. */ + /** + * Sets up an instance of `ImageRegistryApi` to handle messages through the `binaryMessenger`. + */ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable ImageRegistryApi api) { setUp(binaryMessenger, "", api); } - static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String messageChannelSuffix, @Nullable ImageRegistryApi api) { + + static void setUp( + @NonNull BinaryMessenger binaryMessenger, + @NonNull String messageChannelSuffix, + @Nullable ImageRegistryApi api) { messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.ImageRegistryApi.addBitmapToCache" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.ImageRegistryApi.addBitmapToCache" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7297,8 +7830,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess try { api.addBitmapToCache(idArg, bitmapArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7310,7 +7842,10 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.ImageRegistryApi.removeBitmapFromCache" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.ImageRegistryApi.removeBitmapFromCache" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7320,8 +7855,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess try { api.removeBitmapFromCache(idArg); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); @@ -7333,7 +7867,10 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.google_maps_flutter_android.ImageRegistryApi.clearBitmapCache" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.ImageRegistryApi.clearBitmapCache" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { @@ -7341,8 +7878,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess try { api.clearBitmapCache(); wrapped.add(0, null); - } - catch (Throwable exception) { + } catch (Throwable exception) { wrapped = wrapError(exception); } reply.reply(wrapped); diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/PolylinesController.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/PolylinesController.java index 96c64984fe0..69a83a80a40 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/PolylinesController.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/PolylinesController.java @@ -25,7 +25,9 @@ class PolylinesController { private final ImageRegistry imageRegistry; PolylinesController( - @NonNull MapsCallbackApi flutterApi, AssetManager assetManager, ImageRegistry imageRegistry, + @NonNull MapsCallbackApi flutterApi, + AssetManager assetManager, + ImageRegistry imageRegistry, float density) { this.assetManager = assetManager; this.polylineIdToController = new HashMap<>(); @@ -77,8 +79,8 @@ boolean onPolylineTap(String googlePolylineId) { private void addPolyline(@NonNull Messages.PlatformPolyline polyline) { PolylineBuilder polylineBuilder = new PolylineBuilder(density); String polylineId = - Convert.interpretPolylineOptions(polyline, polylineBuilder, assetManager, imageRegistry, - density); + Convert.interpretPolylineOptions( + polyline, polylineBuilder, assetManager, imageRegistry, density); PolylineOptions options = polylineBuilder.build(); addPolyline(polylineId, options, polylineBuilder.consumeTapEvents()); } @@ -95,8 +97,8 @@ private void changePolyline(@NonNull Messages.PlatformPolyline polyline) { String polylineId = polyline.getPolylineId(); PolylineController polylineController = polylineIdToController.get(polylineId); if (polylineController != null) { - Convert.interpretPolylineOptions(polyline, polylineController, assetManager, imageRegistry, - density); + Convert.interpretPolylineOptions( + polyline, polylineController, assetManager, imageRegistry, density); } } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ConvertTest.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ConvertTest.java index b6b9b841e7b..924f3e7a0f6 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ConvertTest.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ConvertTest.java @@ -16,15 +16,12 @@ import static io.flutter.plugins.googlemaps.Convert.HEATMAP_RADIUS_KEY; import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; -import android.appwidget.AppWidgetProvider; -import android.content.Context; import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.Canvas; @@ -32,7 +29,6 @@ import android.graphics.Paint; import android.os.Build; import android.util.Base64; -import androidx.test.core.app.ApplicationProvider; import androidx.annotation.NonNull; import com.google.android.gms.maps.model.BitmapDescriptor; import com.google.android.gms.maps.model.LatLng; @@ -346,9 +342,7 @@ public void GetBitmapFromNotRegisteredBitmap() { new ImageRegistry(assetManager, bitmapDescriptorFactoryWrapper, 1L); Messages.PlatformBitmapRegisteredMapBitmap bitmap = - new Messages.PlatformBitmapRegisteredMapBitmap.Builder() - .setId(0L) - .build(); + new Messages.PlatformBitmapRegisteredMapBitmap.Builder().setId(0L).build(); BitmapDescriptor result = Convert.getBitmapFromRegisteredBitmap(imageRegistry, bitmap); Assert.assertEquals(result, null); @@ -366,19 +360,15 @@ public void GetPreviouslyRegisteredBitmap() { .setImagePixelRatio(2.0) .setByteData(bmpData) .build(); - PlatformBitmap platformBitmap = new PlatformBitmap.Builder() - .setBitmap(bitmap) - .build(); + PlatformBitmap platformBitmap = new PlatformBitmap.Builder().setBitmap(bitmap).build(); when(bitmapDescriptorFactoryWrapper.fromBitmap(any())).thenReturn(mockBitmapDescriptor); imageRegistry.addBitmapToCache(0L, platformBitmap); Messages.PlatformBitmapRegisteredMapBitmap registeredBitmap = - new Messages.PlatformBitmapRegisteredMapBitmap.Builder() - .setId(0L) - .build(); + new Messages.PlatformBitmapRegisteredMapBitmap.Builder().setId(0L).build(); when(bitmapDescriptorFactoryWrapper.fromBitmap(any())).thenReturn(mockBitmapDescriptor); - BitmapDescriptor result = Convert.getBitmapFromRegisteredBitmap(imageRegistry, - registeredBitmap); + BitmapDescriptor result = + Convert.getBitmapFromRegisteredBitmap(imageRegistry, registeredBitmap); BitmapDescriptor registryBitmapDescriptor = imageRegistry.getBitmap(0L); Assert.assertEquals(result, registryBitmapDescriptor); } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/GoogleMapControllerTest.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/GoogleMapControllerTest.java index 96d2ee23721..ca1556cc9a4 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/GoogleMapControllerTest.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/GoogleMapControllerTest.java @@ -64,8 +64,8 @@ public void before() { // See getGoogleMapControllerWithMockedDependencies for version with dependency injections. public GoogleMapController getGoogleMapController() { GoogleMapController googleMapController = - new GoogleMapController(0, context, mockMessenger, activity::getLifecycle, null, - imageRegistry); + new GoogleMapController( + 0, context, mockMessenger, activity::getLifecycle, null, imageRegistry); googleMapController.init(); return googleMapController; } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ImageRegistryTest.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ImageRegistryTest.java index 3238d2118b1..305f2164145 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ImageRegistryTest.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ImageRegistryTest.java @@ -2,7 +2,6 @@ import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.Mockito.when; import android.content.res.AssetManager; @@ -30,20 +29,15 @@ @Config(minSdk = Build.VERSION_CODES.LOLLIPOP) public class ImageRegistryTest { - @Mock - private AssetManager assetManager; + @Mock private AssetManager assetManager; - @Mock - private BitmapDescriptorFactoryWrapper bitmapDescriptorFactoryWrapper; + @Mock private BitmapDescriptorFactoryWrapper bitmapDescriptorFactoryWrapper; - @Mock - private BitmapDescriptor mockBitmapDescriptor; + @Mock private BitmapDescriptor mockBitmapDescriptor; - @Mock - private BitmapDescriptor mockBitmapDescriptor2; + @Mock private BitmapDescriptor mockBitmapDescriptor2; - @Mock - private FlutterInjectorWrapper flutterInjectorWrapper; + @Mock private FlutterInjectorWrapper flutterInjectorWrapper; AutoCloseable mockCloseable; @@ -59,8 +53,8 @@ public void tearDown() throws Exception { @Test public void AddBitmapToCacheRegistersABitmap() { - final ImageRegistry imageRegistry = new ImageRegistry(assetManager, - bitmapDescriptorFactoryWrapper, 1L); + final ImageRegistry imageRegistry = + new ImageRegistry(assetManager, bitmapDescriptorFactoryWrapper, 1L); Assert.assertNull(imageRegistry.getBitmap(1L)); byte[] bmpData = Base64.decode(generateBase64Image(Color.BLACK), Base64.DEFAULT); @@ -70,9 +64,8 @@ public void AddBitmapToCacheRegistersABitmap() { .setImagePixelRatio(2.0) .setByteData(bmpData) .build(); - Messages.PlatformBitmap platformBitmap = new Messages.PlatformBitmap.Builder() - .setBitmap(bitmap) - .build(); + Messages.PlatformBitmap platformBitmap = + new Messages.PlatformBitmap.Builder().setBitmap(bitmap).build(); when(bitmapDescriptorFactoryWrapper.fromBitmap(any())).thenReturn(mockBitmapDescriptor); imageRegistry.addBitmapToCache(1L, platformBitmap); @@ -82,8 +75,8 @@ public void AddBitmapToCacheRegistersABitmap() { @Test public void AddBitmapToCacheReplacesExistingBitmap() { - final ImageRegistry imageRegistry = new ImageRegistry(assetManager, - bitmapDescriptorFactoryWrapper, 1L); + final ImageRegistry imageRegistry = + new ImageRegistry(assetManager, bitmapDescriptorFactoryWrapper, 1L); // Add bitmap 1 byte[] bmpData = Base64.decode(generateBase64Image(Color.BLACK), Base64.DEFAULT); @@ -93,9 +86,8 @@ public void AddBitmapToCacheReplacesExistingBitmap() { .setImagePixelRatio(2.0) .setByteData(bmpData) .build(); - Messages.PlatformBitmap platformBitmap = new Messages.PlatformBitmap.Builder() - .setBitmap(bitmap) - .build(); + Messages.PlatformBitmap platformBitmap = + new Messages.PlatformBitmap.Builder().setBitmap(bitmap).build(); when(bitmapDescriptorFactoryWrapper.fromBitmap(any())).thenReturn(mockBitmapDescriptor); imageRegistry.addBitmapToCache(1L, platformBitmap); Assert.assertEquals(imageRegistry.getBitmap(1L), mockBitmapDescriptor); @@ -108,9 +100,7 @@ public void AddBitmapToCacheReplacesExistingBitmap() { .setImagePixelRatio(2.0) .setByteData(bmpData) .build(); - platformBitmap = new Messages.PlatformBitmap.Builder() - .setBitmap(bitmap) - .build(); + platformBitmap = new Messages.PlatformBitmap.Builder().setBitmap(bitmap).build(); when(bitmapDescriptorFactoryWrapper.fromBitmap(any())).thenReturn(mockBitmapDescriptor2); imageRegistry.addBitmapToCache(1L, platformBitmap); Assert.assertNotEquals(imageRegistry.getBitmap(1L), mockBitmapDescriptor); @@ -119,8 +109,8 @@ public void AddBitmapToCacheReplacesExistingBitmap() { @Test public void RemoveBitmapFromCacheRemovesBitmap() { - final ImageRegistry imageRegistry = new ImageRegistry(assetManager, - bitmapDescriptorFactoryWrapper, 1L); + final ImageRegistry imageRegistry = + new ImageRegistry(assetManager, bitmapDescriptorFactoryWrapper, 1L); byte[] bmpData = Base64.decode(generateBase64Image(Color.BLACK), Base64.DEFAULT); Messages.PlatformBitmapBytesMap bitmap = new Messages.PlatformBitmapBytesMap.Builder() @@ -128,9 +118,8 @@ public void RemoveBitmapFromCacheRemovesBitmap() { .setImagePixelRatio(2.0) .setByteData(bmpData) .build(); - Messages.PlatformBitmap platformBitmap = new Messages.PlatformBitmap.Builder() - .setBitmap(bitmap) - .build(); + Messages.PlatformBitmap platformBitmap = + new Messages.PlatformBitmap.Builder().setBitmap(bitmap).build(); when(bitmapDescriptorFactoryWrapper.fromBitmap(any())).thenReturn(mockBitmapDescriptor); imageRegistry.addBitmapToCache(1L, platformBitmap); Assert.assertEquals(imageRegistry.getBitmap(1L), mockBitmapDescriptor); @@ -141,8 +130,8 @@ public void RemoveBitmapFromCacheRemovesBitmap() { @Test public void ClearBitmapCacheRemovesAllSavedBitmaps() { - final ImageRegistry imageRegistry = new ImageRegistry(assetManager, - bitmapDescriptorFactoryWrapper, 1L); + final ImageRegistry imageRegistry = + new ImageRegistry(assetManager, bitmapDescriptorFactoryWrapper, 1L); byte[] bmpData = Base64.decode(generateBase64Image(Color.BLACK), Base64.DEFAULT); Messages.PlatformBitmapBytesMap bitmap = new Messages.PlatformBitmapBytesMap.Builder() @@ -150,9 +139,8 @@ public void ClearBitmapCacheRemovesAllSavedBitmaps() { .setImagePixelRatio(2.0) .setByteData(bmpData) .build(); - Messages.PlatformBitmap platformBitmap = new Messages.PlatformBitmap.Builder() - .setBitmap(bitmap) - .build(); + Messages.PlatformBitmap platformBitmap = + new Messages.PlatformBitmap.Builder().setBitmap(bitmap).build(); when(bitmapDescriptorFactoryWrapper.fromBitmap(any())).thenReturn(mockBitmapDescriptor); imageRegistry.addBitmapToCache(1L, platformBitmap); @@ -170,15 +158,15 @@ public void ClearBitmapCacheRemovesAllSavedBitmaps() { @Test public void GetBitmapReturnsNullIfBitmapIsNotAvailable() { - final ImageRegistry imageRegistry = new ImageRegistry(assetManager, - bitmapDescriptorFactoryWrapper, 1L); + final ImageRegistry imageRegistry = + new ImageRegistry(assetManager, bitmapDescriptorFactoryWrapper, 1L); Assert.assertNull(imageRegistry.getBitmap(0L)); } @Test public void GetBitmapReturnsRegisteredBitmap() { - final ImageRegistry imageRegistry = new ImageRegistry(assetManager, - bitmapDescriptorFactoryWrapper, 1L); + final ImageRegistry imageRegistry = + new ImageRegistry(assetManager, bitmapDescriptorFactoryWrapper, 1L); byte[] bmpData = Base64.decode(generateBase64Image(Color.BLACK), Base64.DEFAULT); Messages.PlatformBitmapBytesMap bitmap = new Messages.PlatformBitmapBytesMap.Builder() @@ -186,9 +174,8 @@ public void GetBitmapReturnsRegisteredBitmap() { .setImagePixelRatio(2.0) .setByteData(bmpData) .build(); - Messages.PlatformBitmap platformBitmap = new Messages.PlatformBitmap.Builder() - .setBitmap(bitmap) - .build(); + Messages.PlatformBitmap platformBitmap = + new Messages.PlatformBitmap.Builder().setBitmap(bitmap).build(); when(bitmapDescriptorFactoryWrapper.fromBitmap(any())).thenReturn(mockBitmapDescriptor); Assert.assertNull(imageRegistry.getBitmap(1L)); @@ -201,12 +188,9 @@ public void AddBitmapToCacheThrowsOnWrongBitmapType() { ImageRegistry imageRegistry = new ImageRegistry(assetManager, bitmapDescriptorFactoryWrapper, 1L); Messages.PlatformBitmapRegisteredMapBitmap registeredMapBitmap = - new Messages.PlatformBitmapRegisteredMapBitmap.Builder() - .setId(0L) - .build(); - Messages.PlatformBitmap platformBitmap = new Messages.PlatformBitmap.Builder() - .setBitmap(registeredMapBitmap) - .build(); + new Messages.PlatformBitmapRegisteredMapBitmap.Builder().setId(0L).build(); + Messages.PlatformBitmap platformBitmap = + new Messages.PlatformBitmap.Builder().setBitmap(registeredMapBitmap).build(); try { imageRegistry.addBitmapToCache(0L, platformBitmap); } catch (IllegalArgumentException e) { diff --git a/packages/google_maps_flutter/google_maps_flutter_android/lib/src/messages.g.dart b/packages/google_maps_flutter/google_maps_flutter_android/lib/src/messages.g.dart index 397fd6ce1a3..aa3eca910be 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/lib/src/messages.g.dart +++ b/packages/google_maps_flutter/google_maps_flutter_android/lib/src/messages.g.dart @@ -18,7 +18,8 @@ PlatformException _createConnectionError(String channelName) { ); } -List wrapResponse({Object? result, PlatformException? error, bool empty = false}) { +List wrapResponse( + {Object? result, PlatformException? error, bool empty = false}) { if (empty) { return []; } @@ -1079,8 +1080,10 @@ class PlatformMapViewCreationParams { initialPolygons: (result[4] as List?)!.cast(), initialPolylines: (result[5] as List?)!.cast(), initialHeatmaps: (result[6] as List?)!.cast(), - initialTileOverlays: (result[7] as List?)!.cast(), - initialClusterManagers: (result[8] as List?)!.cast(), + initialTileOverlays: + (result[7] as List?)!.cast(), + initialClusterManagers: + (result[8] as List?)!.cast(), ); } } @@ -1544,7 +1547,6 @@ class PlatformBitmapRegisteredMapBitmap { } } - class _PigeonCodec extends StandardMessageCodec { const _PigeonCodec(); @override @@ -1552,142 +1554,142 @@ class _PigeonCodec extends StandardMessageCodec { if (value is int) { buffer.putUint8(4); buffer.putInt64(value); - } else if (value is PlatformMapType) { + } else if (value is PlatformMapType) { buffer.putUint8(129); writeValue(buffer, value.index); - } else if (value is PlatformRendererType) { + } else if (value is PlatformRendererType) { buffer.putUint8(130); writeValue(buffer, value.index); - } else if (value is PlatformJointType) { + } else if (value is PlatformJointType) { buffer.putUint8(131); writeValue(buffer, value.index); - } else if (value is PlatformCapType) { + } else if (value is PlatformCapType) { buffer.putUint8(132); writeValue(buffer, value.index); - } else if (value is PlatformPatternItemType) { + } else if (value is PlatformPatternItemType) { buffer.putUint8(133); writeValue(buffer, value.index); - } else if (value is PlatformMapBitmapScaling) { + } else if (value is PlatformMapBitmapScaling) { buffer.putUint8(134); writeValue(buffer, value.index); - } else if (value is PlatformCameraPosition) { + } else if (value is PlatformCameraPosition) { buffer.putUint8(135); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdate) { + } else if (value is PlatformCameraUpdate) { buffer.putUint8(136); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateNewCameraPosition) { + } else if (value is PlatformCameraUpdateNewCameraPosition) { buffer.putUint8(137); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateNewLatLng) { + } else if (value is PlatformCameraUpdateNewLatLng) { buffer.putUint8(138); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateNewLatLngBounds) { + } else if (value is PlatformCameraUpdateNewLatLngBounds) { buffer.putUint8(139); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateNewLatLngZoom) { + } else if (value is PlatformCameraUpdateNewLatLngZoom) { buffer.putUint8(140); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateScrollBy) { + } else if (value is PlatformCameraUpdateScrollBy) { buffer.putUint8(141); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateZoomBy) { + } else if (value is PlatformCameraUpdateZoomBy) { buffer.putUint8(142); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateZoom) { + } else if (value is PlatformCameraUpdateZoom) { buffer.putUint8(143); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateZoomTo) { + } else if (value is PlatformCameraUpdateZoomTo) { buffer.putUint8(144); writeValue(buffer, value.encode()); - } else if (value is PlatformCircle) { + } else if (value is PlatformCircle) { buffer.putUint8(145); writeValue(buffer, value.encode()); - } else if (value is PlatformHeatmap) { + } else if (value is PlatformHeatmap) { buffer.putUint8(146); writeValue(buffer, value.encode()); - } else if (value is PlatformClusterManager) { + } else if (value is PlatformClusterManager) { buffer.putUint8(147); writeValue(buffer, value.encode()); - } else if (value is PlatformDoublePair) { + } else if (value is PlatformDoublePair) { buffer.putUint8(148); writeValue(buffer, value.encode()); - } else if (value is PlatformInfoWindow) { + } else if (value is PlatformInfoWindow) { buffer.putUint8(149); writeValue(buffer, value.encode()); - } else if (value is PlatformMarker) { + } else if (value is PlatformMarker) { buffer.putUint8(150); writeValue(buffer, value.encode()); - } else if (value is PlatformPolygon) { + } else if (value is PlatformPolygon) { buffer.putUint8(151); writeValue(buffer, value.encode()); - } else if (value is PlatformPolyline) { + } else if (value is PlatformPolyline) { buffer.putUint8(152); writeValue(buffer, value.encode()); - } else if (value is PlatformCap) { + } else if (value is PlatformCap) { buffer.putUint8(153); writeValue(buffer, value.encode()); - } else if (value is PlatformPatternItem) { + } else if (value is PlatformPatternItem) { buffer.putUint8(154); writeValue(buffer, value.encode()); - } else if (value is PlatformTile) { + } else if (value is PlatformTile) { buffer.putUint8(155); writeValue(buffer, value.encode()); - } else if (value is PlatformTileOverlay) { + } else if (value is PlatformTileOverlay) { buffer.putUint8(156); writeValue(buffer, value.encode()); - } else if (value is PlatformEdgeInsets) { + } else if (value is PlatformEdgeInsets) { buffer.putUint8(157); writeValue(buffer, value.encode()); - } else if (value is PlatformLatLng) { + } else if (value is PlatformLatLng) { buffer.putUint8(158); writeValue(buffer, value.encode()); - } else if (value is PlatformLatLngBounds) { + } else if (value is PlatformLatLngBounds) { buffer.putUint8(159); writeValue(buffer, value.encode()); - } else if (value is PlatformCluster) { + } else if (value is PlatformCluster) { buffer.putUint8(160); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraTargetBounds) { + } else if (value is PlatformCameraTargetBounds) { buffer.putUint8(161); writeValue(buffer, value.encode()); - } else if (value is PlatformMapViewCreationParams) { + } else if (value is PlatformMapViewCreationParams) { buffer.putUint8(162); writeValue(buffer, value.encode()); - } else if (value is PlatformMapConfiguration) { + } else if (value is PlatformMapConfiguration) { buffer.putUint8(163); writeValue(buffer, value.encode()); - } else if (value is PlatformPoint) { + } else if (value is PlatformPoint) { buffer.putUint8(164); writeValue(buffer, value.encode()); - } else if (value is PlatformTileLayer) { + } else if (value is PlatformTileLayer) { buffer.putUint8(165); writeValue(buffer, value.encode()); - } else if (value is PlatformZoomRange) { + } else if (value is PlatformZoomRange) { buffer.putUint8(166); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmap) { + } else if (value is PlatformBitmap) { buffer.putUint8(167); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapDefaultMarker) { + } else if (value is PlatformBitmapDefaultMarker) { buffer.putUint8(168); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapBytes) { + } else if (value is PlatformBitmapBytes) { buffer.putUint8(169); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapAsset) { + } else if (value is PlatformBitmapAsset) { buffer.putUint8(170); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapAssetImage) { + } else if (value is PlatformBitmapAssetImage) { buffer.putUint8(171); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapAssetMap) { + } else if (value is PlatformBitmapAssetMap) { buffer.putUint8(172); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapBytesMap) { + } else if (value is PlatformBitmapBytesMap) { buffer.putUint8(173); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapRegisteredMapBitmap) { + } else if (value is PlatformBitmapRegisteredMapBitmap) { buffer.putUint8(174); writeValue(buffer, value.encode()); } else { @@ -1698,103 +1700,103 @@ class _PigeonCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 129: + case 129: final int? value = readValue(buffer) as int?; return value == null ? null : PlatformMapType.values[value]; - case 130: + case 130: final int? value = readValue(buffer) as int?; return value == null ? null : PlatformRendererType.values[value]; - case 131: + case 131: final int? value = readValue(buffer) as int?; return value == null ? null : PlatformJointType.values[value]; - case 132: + case 132: final int? value = readValue(buffer) as int?; return value == null ? null : PlatformCapType.values[value]; - case 133: + case 133: final int? value = readValue(buffer) as int?; return value == null ? null : PlatformPatternItemType.values[value]; - case 134: + case 134: final int? value = readValue(buffer) as int?; return value == null ? null : PlatformMapBitmapScaling.values[value]; - case 135: + case 135: return PlatformCameraPosition.decode(readValue(buffer)!); - case 136: + case 136: return PlatformCameraUpdate.decode(readValue(buffer)!); - case 137: + case 137: return PlatformCameraUpdateNewCameraPosition.decode(readValue(buffer)!); - case 138: + case 138: return PlatformCameraUpdateNewLatLng.decode(readValue(buffer)!); - case 139: + case 139: return PlatformCameraUpdateNewLatLngBounds.decode(readValue(buffer)!); - case 140: + case 140: return PlatformCameraUpdateNewLatLngZoom.decode(readValue(buffer)!); - case 141: + case 141: return PlatformCameraUpdateScrollBy.decode(readValue(buffer)!); - case 142: + case 142: return PlatformCameraUpdateZoomBy.decode(readValue(buffer)!); - case 143: + case 143: return PlatformCameraUpdateZoom.decode(readValue(buffer)!); - case 144: + case 144: return PlatformCameraUpdateZoomTo.decode(readValue(buffer)!); - case 145: + case 145: return PlatformCircle.decode(readValue(buffer)!); - case 146: + case 146: return PlatformHeatmap.decode(readValue(buffer)!); - case 147: + case 147: return PlatformClusterManager.decode(readValue(buffer)!); - case 148: + case 148: return PlatformDoublePair.decode(readValue(buffer)!); - case 149: + case 149: return PlatformInfoWindow.decode(readValue(buffer)!); - case 150: + case 150: return PlatformMarker.decode(readValue(buffer)!); - case 151: + case 151: return PlatformPolygon.decode(readValue(buffer)!); - case 152: + case 152: return PlatformPolyline.decode(readValue(buffer)!); - case 153: + case 153: return PlatformCap.decode(readValue(buffer)!); - case 154: + case 154: return PlatformPatternItem.decode(readValue(buffer)!); - case 155: + case 155: return PlatformTile.decode(readValue(buffer)!); - case 156: + case 156: return PlatformTileOverlay.decode(readValue(buffer)!); - case 157: + case 157: return PlatformEdgeInsets.decode(readValue(buffer)!); - case 158: + case 158: return PlatformLatLng.decode(readValue(buffer)!); - case 159: + case 159: return PlatformLatLngBounds.decode(readValue(buffer)!); - case 160: + case 160: return PlatformCluster.decode(readValue(buffer)!); - case 161: + case 161: return PlatformCameraTargetBounds.decode(readValue(buffer)!); - case 162: + case 162: return PlatformMapViewCreationParams.decode(readValue(buffer)!); - case 163: + case 163: return PlatformMapConfiguration.decode(readValue(buffer)!); - case 164: + case 164: return PlatformPoint.decode(readValue(buffer)!); - case 165: + case 165: return PlatformTileLayer.decode(readValue(buffer)!); - case 166: + case 166: return PlatformZoomRange.decode(readValue(buffer)!); - case 167: + case 167: return PlatformBitmap.decode(readValue(buffer)!); - case 168: + case 168: return PlatformBitmapDefaultMarker.decode(readValue(buffer)!); - case 169: + case 169: return PlatformBitmapBytes.decode(readValue(buffer)!); - case 170: + case 170: return PlatformBitmapAsset.decode(readValue(buffer)!); - case 171: + case 171: return PlatformBitmapAssetImage.decode(readValue(buffer)!); - case 172: + case 172: return PlatformBitmapAssetMap.decode(readValue(buffer)!); - case 173: + case 173: return PlatformBitmapBytesMap.decode(readValue(buffer)!); - case 174: + case 174: return PlatformBitmapRegisteredMapBitmap.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -1811,7 +1813,8 @@ class MapsApi { /// BinaryMessenger will be used which routes to the host platform. MapsApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) : pigeonVar_binaryMessenger = binaryMessenger, - pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + pigeonVar_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; final BinaryMessenger? pigeonVar_binaryMessenger; static const MessageCodec pigeonChannelCodec = _PigeonCodec(); @@ -1820,8 +1823,10 @@ class MapsApi { /// Returns once the map instance is available. Future waitForMap() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.waitForMap$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.waitForMap$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -1845,15 +1850,18 @@ class MapsApi { /// /// Only non-null configuration values will result in updates; options with /// null values will remain unchanged. - Future updateMapConfiguration(PlatformMapConfiguration configuration) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateMapConfiguration$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + Future updateMapConfiguration( + PlatformMapConfiguration configuration) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateMapConfiguration$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([configuration]) as List?; + final List? pigeonVar_replyList = await pigeonVar_channel + .send([configuration]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1868,15 +1876,18 @@ class MapsApi { } /// Updates the set of circles on the map. - Future updateCircles(List toAdd, List toChange, List idsToRemove) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateCircles$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + Future updateCircles(List toAdd, + List toChange, List idsToRemove) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateCircles$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([toAdd, toChange, idsToRemove]) as List?; + final List? pigeonVar_replyList = await pigeonVar_channel + .send([toAdd, toChange, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1891,15 +1902,18 @@ class MapsApi { } /// Updates the set of heatmaps on the map. - Future updateHeatmaps(List toAdd, List toChange, List idsToRemove) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateHeatmaps$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + Future updateHeatmaps(List toAdd, + List toChange, List idsToRemove) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateHeatmaps$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([toAdd, toChange, idsToRemove]) as List?; + final List? pigeonVar_replyList = await pigeonVar_channel + .send([toAdd, toChange, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1914,15 +1928,18 @@ class MapsApi { } /// Updates the set of custer managers for clusters on the map. - Future updateClusterManagers(List toAdd, List idsToRemove) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateClusterManagers$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + Future updateClusterManagers( + List toAdd, List idsToRemove) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateClusterManagers$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([toAdd, idsToRemove]) as List?; + final List? pigeonVar_replyList = await pigeonVar_channel + .send([toAdd, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1937,15 +1954,18 @@ class MapsApi { } /// Updates the set of markers on the map. - Future updateMarkers(List toAdd, List toChange, List idsToRemove) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateMarkers$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + Future updateMarkers(List toAdd, + List toChange, List idsToRemove) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateMarkers$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([toAdd, toChange, idsToRemove]) as List?; + final List? pigeonVar_replyList = await pigeonVar_channel + .send([toAdd, toChange, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1960,15 +1980,18 @@ class MapsApi { } /// Updates the set of polygonss on the map. - Future updatePolygons(List toAdd, List toChange, List idsToRemove) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updatePolygons$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + Future updatePolygons(List toAdd, + List toChange, List idsToRemove) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updatePolygons$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([toAdd, toChange, idsToRemove]) as List?; + final List? pigeonVar_replyList = await pigeonVar_channel + .send([toAdd, toChange, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1983,15 +2006,18 @@ class MapsApi { } /// Updates the set of polylines on the map. - Future updatePolylines(List toAdd, List toChange, List idsToRemove) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updatePolylines$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + Future updatePolylines(List toAdd, + List toChange, List idsToRemove) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updatePolylines$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([toAdd, toChange, idsToRemove]) as List?; + final List? pigeonVar_replyList = await pigeonVar_channel + .send([toAdd, toChange, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -2006,15 +2032,18 @@ class MapsApi { } /// Updates the set of tile overlays on the map. - Future updateTileOverlays(List toAdd, List toChange, List idsToRemove) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateTileOverlays$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + Future updateTileOverlays(List toAdd, + List toChange, List idsToRemove) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.updateTileOverlays$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([toAdd, toChange, idsToRemove]) as List?; + final List? pigeonVar_replyList = await pigeonVar_channel + .send([toAdd, toChange, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -2030,8 +2059,10 @@ class MapsApi { /// Gets the screen coordinate for the given map location. Future getScreenCoordinate(PlatformLatLng latLng) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getScreenCoordinate$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getScreenCoordinate$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2058,14 +2089,16 @@ class MapsApi { /// Gets the map location for the given screen coordinate. Future getLatLng(PlatformPoint screenCoordinate) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getLatLng$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getLatLng$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([screenCoordinate]) as List?; + final List? pigeonVar_replyList = await pigeonVar_channel + .send([screenCoordinate]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -2086,8 +2119,10 @@ class MapsApi { /// Gets the map region currently displayed on the map. Future getVisibleRegion() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getVisibleRegion$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getVisibleRegion$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2115,8 +2150,10 @@ class MapsApi { /// Moves the camera according to [cameraUpdate] immediately, with no /// animation. Future moveCamera(PlatformCameraUpdate cameraUpdate) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.moveCamera$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.moveCamera$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2138,8 +2175,10 @@ class MapsApi { /// Moves the camera according to [cameraUpdate], animating the update. Future animateCamera(PlatformCameraUpdate cameraUpdate) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.animateCamera$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.animateCamera$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2161,8 +2200,10 @@ class MapsApi { /// Gets the current map zoom level. Future getZoomLevel() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getZoomLevel$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.getZoomLevel$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2189,8 +2230,10 @@ class MapsApi { /// Show the info window for the marker with the given ID. Future showInfoWindow(String markerId) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.showInfoWindow$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.showInfoWindow$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2212,8 +2255,10 @@ class MapsApi { /// Hide the info window for the marker with the given ID. Future hideInfoWindow(String markerId) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.hideInfoWindow$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.hideInfoWindow$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2236,8 +2281,10 @@ class MapsApi { /// Returns true if the marker with the given ID is currently displaying its /// info window. Future isInfoWindowShown(String markerId) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.isInfoWindowShown$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.isInfoWindowShown$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2268,8 +2315,10 @@ class MapsApi { /// Returns false if there was an error setting the style, such as an invalid /// style string. Future setStyle(String style) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.setStyle$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.setStyle$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2300,8 +2349,10 @@ class MapsApi { /// This allows checking asynchronously for initial style failures, as there /// is no way to return failures from map initialization. Future didLastStyleSucceed() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.didLastStyleSucceed$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.didLastStyleSucceed$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2328,14 +2379,16 @@ class MapsApi { /// Clears the cache of tiles previously requseted from the tile provider. Future clearTileCache(String tileOverlayId) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.clearTileCache$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.clearTileCache$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([tileOverlayId]) as List?; + final List? pigeonVar_replyList = await pigeonVar_channel + .send([tileOverlayId]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -2351,8 +2404,10 @@ class MapsApi { /// Takes a snapshot of the map and returns its image data. Future takeSnapshot() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.takeSnapshot$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsApi.takeSnapshot$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2424,13 +2479,22 @@ abstract class MapsCallbackApi { void onPolylineTap(String polylineId); /// Called to get data for a map tile. - Future getTileOverlayTile(String tileOverlayId, PlatformPoint location, int zoom); - - static void setUp(MapsCallbackApi? api, {BinaryMessenger? binaryMessenger, String messageChannelSuffix = '',}) { - messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + Future getTileOverlayTile( + String tileOverlayId, PlatformPoint location, int zoom); + + static void setUp( + MapsCallbackApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraMoveStarted$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraMoveStarted$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); @@ -2441,24 +2505,29 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraMove$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraMove$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraMove was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraMove was null.'); final List args = (message as List?)!; - final PlatformCameraPosition? arg_cameraPosition = (args[0] as PlatformCameraPosition?); + final PlatformCameraPosition? arg_cameraPosition = + (args[0] as PlatformCameraPosition?); assert(arg_cameraPosition != null, 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraMove was null, expected non-null PlatformCameraPosition.'); try { @@ -2466,15 +2535,19 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraIdle$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCameraIdle$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); @@ -2485,22 +2558,26 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onTap$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onTap$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onTap was null.'); final List args = (message as List?)!; final PlatformLatLng? arg_position = (args[0] as PlatformLatLng?); assert(arg_position != null, @@ -2510,22 +2587,26 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onLongPress$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onLongPress$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onLongPress was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onLongPress was null.'); final List args = (message as List?)!; final PlatformLatLng? arg_position = (args[0] as PlatformLatLng?); assert(arg_position != null, @@ -2535,22 +2616,26 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerTap$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerTap$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerTap was null.'); final List args = (message as List?)!; final String? arg_markerId = (args[0] as String?); assert(arg_markerId != null, @@ -2560,22 +2645,26 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDragStart$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDragStart$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDragStart was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDragStart was null.'); final List args = (message as List?)!; final String? arg_markerId = (args[0] as String?); assert(arg_markerId != null, @@ -2588,22 +2677,26 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDrag$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDrag$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDrag was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDrag was null.'); final List args = (message as List?)!; final String? arg_markerId = (args[0] as String?); assert(arg_markerId != null, @@ -2616,22 +2709,26 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDragEnd$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDragEnd$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDragEnd was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onMarkerDragEnd was null.'); final List args = (message as List?)!; final String? arg_markerId = (args[0] as String?); assert(arg_markerId != null, @@ -2644,22 +2741,26 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onInfoWindowTap$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onInfoWindowTap$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onInfoWindowTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onInfoWindowTap was null.'); final List args = (message as List?)!; final String? arg_markerId = (args[0] as String?); assert(arg_markerId != null, @@ -2669,22 +2770,26 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCircleTap$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCircleTap$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCircleTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onCircleTap was null.'); final List args = (message as List?)!; final String? arg_circleId = (args[0] as String?); assert(arg_circleId != null, @@ -2694,22 +2799,26 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onClusterTap$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onClusterTap$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onClusterTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onClusterTap was null.'); final List args = (message as List?)!; final PlatformCluster? arg_cluster = (args[0] as PlatformCluster?); assert(arg_cluster != null, @@ -2719,22 +2828,26 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onPolygonTap$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onPolygonTap$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onPolygonTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onPolygonTap was null.'); final List args = (message as List?)!; final String? arg_polygonId = (args[0] as String?); assert(arg_polygonId != null, @@ -2744,22 +2857,26 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onPolylineTap$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onPolylineTap$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onPolylineTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.onPolylineTap was null.'); final List args = (message as List?)!; final String? arg_polylineId = (args[0] as String?); assert(arg_polylineId != null, @@ -2769,22 +2886,26 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.getTileOverlayTile$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.getTileOverlayTile$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.getTileOverlayTile was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.getTileOverlayTile was null.'); final List args = (message as List?)!; final String? arg_tileOverlayId = (args[0] as String?); assert(arg_tileOverlayId != null, @@ -2796,12 +2917,14 @@ abstract class MapsCallbackApi { assert(arg_zoom != null, 'Argument for dev.flutter.pigeon.google_maps_flutter_android.MapsCallbackApi.getTileOverlayTile was null, expected non-null int.'); try { - final PlatformTile output = await api.getTileOverlayTile(arg_tileOverlayId!, arg_location!, arg_zoom!); + final PlatformTile output = await api.getTileOverlayTile( + arg_tileOverlayId!, arg_location!, arg_zoom!); return wrapResponse(result: output); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } @@ -2814,9 +2937,11 @@ class MapsInitializerApi { /// Constructor for [MapsInitializerApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - MapsInitializerApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + MapsInitializerApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) : pigeonVar_binaryMessenger = binaryMessenger, - pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + pigeonVar_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; final BinaryMessenger? pigeonVar_binaryMessenger; static const MessageCodec pigeonChannelCodec = _PigeonCodec(); @@ -2829,9 +2954,12 @@ class MapsInitializerApi { /// /// Calling this more than once in the lifetime of an application will result /// in an error. - Future initializeWithPreferredRenderer(PlatformRendererType? type) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInitializerApi.initializeWithPreferredRenderer$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + Future initializeWithPreferredRenderer( + PlatformRendererType? type) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsInitializerApi.initializeWithPreferredRenderer$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2864,9 +2992,11 @@ class MapsPlatformViewApi { /// Constructor for [MapsPlatformViewApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - MapsPlatformViewApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + MapsPlatformViewApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) : pigeonVar_binaryMessenger = binaryMessenger, - pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + pigeonVar_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; final BinaryMessenger? pigeonVar_binaryMessenger; static const MessageCodec pigeonChannelCodec = _PigeonCodec(); @@ -2874,8 +3004,10 @@ class MapsPlatformViewApi { final String pigeonVar_messageChannelSuffix; Future createView(PlatformMapViewCreationParams? type) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsPlatformViewApi.createView$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsPlatformViewApi.createView$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2901,9 +3033,11 @@ class MapsInspectorApi { /// Constructor for [MapsInspectorApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - MapsInspectorApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + MapsInspectorApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) : pigeonVar_binaryMessenger = binaryMessenger, - pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + pigeonVar_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; final BinaryMessenger? pigeonVar_binaryMessenger; static const MessageCodec pigeonChannelCodec = _PigeonCodec(); @@ -2911,8 +3045,10 @@ class MapsInspectorApi { final String pigeonVar_messageChannelSuffix; Future areBuildingsEnabled() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areBuildingsEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areBuildingsEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2938,8 +3074,10 @@ class MapsInspectorApi { } Future areRotateGesturesEnabled() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areRotateGesturesEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areRotateGesturesEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2965,8 +3103,10 @@ class MapsInspectorApi { } Future areZoomControlsEnabled() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areZoomControlsEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areZoomControlsEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2992,8 +3132,10 @@ class MapsInspectorApi { } Future areScrollGesturesEnabled() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areScrollGesturesEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areScrollGesturesEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3019,8 +3161,10 @@ class MapsInspectorApi { } Future areTiltGesturesEnabled() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areTiltGesturesEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areTiltGesturesEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3046,8 +3190,10 @@ class MapsInspectorApi { } Future areZoomGesturesEnabled() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areZoomGesturesEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.areZoomGesturesEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3073,8 +3219,10 @@ class MapsInspectorApi { } Future isCompassEnabled() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isCompassEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isCompassEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3100,8 +3248,10 @@ class MapsInspectorApi { } Future isLiteModeEnabled() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isLiteModeEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isLiteModeEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3122,8 +3272,10 @@ class MapsInspectorApi { } Future isMapToolbarEnabled() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isMapToolbarEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isMapToolbarEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3149,8 +3301,10 @@ class MapsInspectorApi { } Future isMyLocationButtonEnabled() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isMyLocationButtonEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isMyLocationButtonEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3176,8 +3330,10 @@ class MapsInspectorApi { } Future isTrafficEnabled() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isTrafficEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.isTrafficEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3203,14 +3359,16 @@ class MapsInspectorApi { } Future getTileOverlayInfo(String tileOverlayId) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.getTileOverlayInfo$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.getTileOverlayInfo$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([tileOverlayId]) as List?; + final List? pigeonVar_replyList = await pigeonVar_channel + .send([tileOverlayId]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -3225,8 +3383,10 @@ class MapsInspectorApi { } Future getZoomRange() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.getZoomRange$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.getZoomRange$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3252,14 +3412,16 @@ class MapsInspectorApi { } Future> getClusters(String clusterManagerId) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.getClusters$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.getClusters$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([clusterManagerId]) as List?; + final List? pigeonVar_replyList = await pigeonVar_channel + .send([clusterManagerId]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -3274,7 +3436,8 @@ class MapsInspectorApi { message: 'Host platform returned null value for non-null return value.', ); } else { - return (pigeonVar_replyList[0] as List?)!.cast(); + return (pigeonVar_replyList[0] as List?)! + .cast(); } } } @@ -3284,9 +3447,11 @@ class ImageRegistryApi { /// Constructor for [ImageRegistryApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - ImageRegistryApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + ImageRegistryApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) : pigeonVar_binaryMessenger = binaryMessenger, - pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + pigeonVar_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; final BinaryMessenger? pigeonVar_binaryMessenger; static const MessageCodec pigeonChannelCodec = _PigeonCodec(); @@ -3295,8 +3460,10 @@ class ImageRegistryApi { /// Adds a bitmap to the cache. Future addBitmapToCache(int id, PlatformBitmap bitmap) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.ImageRegistryApi.addBitmapToCache$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.ImageRegistryApi.addBitmapToCache$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3318,8 +3485,10 @@ class ImageRegistryApi { /// Retrieves a bitmap from the cache. Future removeBitmapFromCache(int id) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.ImageRegistryApi.removeBitmapFromCache$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.ImageRegistryApi.removeBitmapFromCache$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3341,8 +3510,10 @@ class ImageRegistryApi { /// Clears the bitmap cache. Future clearBitmapCache() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.ImageRegistryApi.clearBitmapCache$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.ImageRegistryApi.clearBitmapCache$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.h b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.h index 11310df7da3..af9f8395939 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.h +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.h @@ -9,7 +9,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface FGMImageRegistry : NSObject +@interface FGMImageRegistry : NSObject - (instancetype)initWithRegistrar:(NSObject *)registrar; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.m index 7a08015eb91..2374de756cc 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FGMImageRegistry.m @@ -8,7 +8,7 @@ @interface FGMImageRegistry () /// A dictionary that stores all registered image IDs and corresponding images. -@property (nonatomic, strong) NSMutableDictionary *registry; +@property(nonatomic, strong) NSMutableDictionary *registry; /// A registration context of this plugin. @property(weak, nonatomic) NSObject *registrar; @@ -18,35 +18,38 @@ @interface FGMImageRegistry () @implementation FGMImageRegistry - (instancetype)initWithRegistrar:(NSObject *)registrar { - self = [super init]; - if (self) { - _registrar = registrar; - _registry = [[NSMutableDictionary alloc] init]; - } - return self; + self = [super init]; + if (self) { + _registrar = registrar; + _registry = [[NSMutableDictionary alloc] init]; + } + return self; } -- (void)addBitmapToCacheId:(NSInteger)id bitmap:(nonnull FGMPlatformBitmap *)bitmap error:(FlutterError * _Nullable __autoreleasing * _Nonnull)error { - CGFloat screenScale = [[UIScreen mainScreen] scale]; - UIImage *image = [FLTGoogleMapMarkerController iconFromBitmap:bitmap - registrar:_registrar - screenScale:screenScale - imageRegistry:self]; - NSNumber *idNumber = [NSNumber numberWithInteger:id]; - [self.registry setObject:image forKey:idNumber]; +- (void)addBitmapToCacheId:(NSInteger)id + bitmap:(nonnull FGMPlatformBitmap *)bitmap + error:(FlutterError *_Nullable __autoreleasing *_Nonnull)error { + CGFloat screenScale = [[UIScreen mainScreen] scale]; + UIImage *image = [FLTGoogleMapMarkerController iconFromBitmap:bitmap + registrar:_registrar + screenScale:screenScale + imageRegistry:self]; + NSNumber *idNumber = [NSNumber numberWithInteger:id]; + [self.registry setObject:image forKey:idNumber]; } -- (void)removeBitmapFromCacheId:(NSInteger)id error:(FlutterError * _Nullable __autoreleasing * _Nonnull)error { - NSNumber *idNumber = [NSNumber numberWithInteger:id]; - [self.registry removeObjectForKey:idNumber]; +- (void)removeBitmapFromCacheId:(NSInteger)id + error:(FlutterError *_Nullable __autoreleasing *_Nonnull)error { + NSNumber *idNumber = [NSNumber numberWithInteger:id]; + [self.registry removeObjectForKey:idNumber]; } -- (void)clearBitmapCacheWithError:(FlutterError * _Nullable __autoreleasing * _Nonnull)error { - [self.registry removeAllObjects]; +- (void)clearBitmapCacheWithError:(FlutterError *_Nullable __autoreleasing *_Nonnull)error { + [self.registry removeAllObjects]; } - (UIImage *)getBitmap:(NSNumber *)identifier { - return self.registry[identifier]; + return self.registry[identifier]; } @end diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.h b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.h index 7bf7cf4f234..5eb2b254d67 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.h +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.h @@ -6,12 +6,12 @@ #import #import "FGMClusterManagersController.h" +#import "FGMImageRegistry.h" #import "GoogleMapCircleController.h" #import "GoogleMapController.h" #import "GoogleMapMarkerController.h" #import "GoogleMapPolygonController.h" #import "GoogleMapPolylineController.h" -#import "FGMImageRegistry.h" NS_ASSUME_NONNULL_BEGIN diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.m index 53bd8c0cbe3..0253d9bea57 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.m @@ -9,10 +9,10 @@ @implementation FLTGoogleMapsPlugin + (void)registerWithRegistrar:(NSObject *)registrar { - FGMImageRegistry *imageRegistry = [[FGMImageRegistry alloc] initWithRegistrar:registrar]; + FGMImageRegistry *imageRegistry = [[FGMImageRegistry alloc] initWithRegistrar:registrar]; SetUpFGMImageRegistryApi(registrar.messenger, imageRegistry); - FLTGoogleMapFactory *googleMapFactory = [[FLTGoogleMapFactory alloc] initWithRegistrar:registrar - imageRegistry:imageRegistry]; + FLTGoogleMapFactory *googleMapFactory = + [[FLTGoogleMapFactory alloc] initWithRegistrar:registrar imageRegistry:imageRegistry]; [registrar registerViewFactory:googleMapFactory withId:@"plugins.flutter.dev/google_maps_ios" gestureRecognizersBlockingPolicy: diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.h b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.h index f930daef688..b7236a62d01 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.h +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.h @@ -6,12 +6,12 @@ #import #import "FGMClusterManagersController.h" +#import "FGMImageRegistry.h" #import "GoogleMapCircleController.h" #import "GoogleMapMarkerController.h" #import "GoogleMapPolygonController.h" #import "GoogleMapPolylineController.h" #import "messages.g.h" -#import "FGMImageRegistry.h" NS_ASSUME_NONNULL_BEGIN diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.m index 5e2dc618630..49008d55884 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.m @@ -6,12 +6,12 @@ #import "GoogleMapController.h" +#import "FGMImageRegistry.h" #import "FGMMarkerUserData.h" #import "FLTGoogleMapHeatmapController.h" #import "FLTGoogleMapJSONConversions.h" #import "FLTGoogleMapTileOverlayController.h" #import "messages.g.h" -#import "FGMImageRegistry.h" #pragma mark - Conversion of JSON-like values sent via platform channels. Forward declarations. diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.h b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.h index 2887903f066..328096f47f4 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.h +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.h @@ -6,9 +6,9 @@ #import #import "FGMClusterManagersController.h" +#import "FGMImageRegistry.h" #import "GoogleMapController.h" #import "messages.g.h" -#import "FGMImageRegistry.h" NS_ASSUME_NONNULL_BEGIN diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.m index 3225d27bd8d..ced97d529e5 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.m @@ -4,9 +4,9 @@ #import "GoogleMapMarkerController.h" +#import "FGMImageRegistry.h" #import "FGMMarkerUserData.h" #import "FLTGoogleMapJSONConversions.h" -#import "FGMImageRegistry.h" @interface FLTGoogleMapMarkerController () @@ -407,7 +407,7 @@ - (instancetype)initWithMapView:(GMSMapView *)mapView _clusterManagersController = clusterManagersController; _markerIdentifierToController = [[NSMutableDictionary alloc] init]; _registrar = registrar; - _imageRegistry = imageRegistry; + _imageRegistry = imageRegistry; } return self; } diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.h b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.h index e15c1d0fa25..39f0c0db379 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.h +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.h @@ -110,26 +110,26 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { @interface FGMPlatformCameraPosition : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithBearing:(double )bearing - target:(FGMPlatformLatLng *)target - tilt:(double )tilt - zoom:(double )zoom; -@property(nonatomic, assign) double bearing; -@property(nonatomic, strong) FGMPlatformLatLng * target; -@property(nonatomic, assign) double tilt; -@property(nonatomic, assign) double zoom; ++ (instancetype)makeWithBearing:(double)bearing + target:(FGMPlatformLatLng *)target + tilt:(double)tilt + zoom:(double)zoom; +@property(nonatomic, assign) double bearing; +@property(nonatomic, strong) FGMPlatformLatLng *target; +@property(nonatomic, assign) double tilt; +@property(nonatomic, assign) double zoom; @end /// Pigeon representation of a CameraUpdate. @interface FGMPlatformCameraUpdate : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithCameraUpdate:(id )cameraUpdate; ++ (instancetype)makeWithCameraUpdate:(id)cameraUpdate; /// This Object must be one of the classes below prefixed with /// PlatformCameraUpdate. Each such class represents a different type of /// camera update, and each holds a different set of data, preventing the /// use of a single unified class. -@property(nonatomic, strong) id cameraUpdate; +@property(nonatomic, strong) id cameraUpdate; @end /// Pigeon equivalent of NewCameraPosition @@ -137,7 +137,7 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithCameraPosition:(FGMPlatformCameraPosition *)cameraPosition; -@property(nonatomic, strong) FGMPlatformCameraPosition * cameraPosition; +@property(nonatomic, strong) FGMPlatformCameraPosition *cameraPosition; @end /// Pigeon equivalent of NewLatLng @@ -145,98 +145,94 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithLatLng:(FGMPlatformLatLng *)latLng; -@property(nonatomic, strong) FGMPlatformLatLng * latLng; +@property(nonatomic, strong) FGMPlatformLatLng *latLng; @end /// Pigeon equivalent of NewLatLngBounds @interface FGMPlatformCameraUpdateNewLatLngBounds : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithBounds:(FGMPlatformLatLngBounds *)bounds - padding:(double )padding; -@property(nonatomic, strong) FGMPlatformLatLngBounds * bounds; -@property(nonatomic, assign) double padding; ++ (instancetype)makeWithBounds:(FGMPlatformLatLngBounds *)bounds padding:(double)padding; +@property(nonatomic, strong) FGMPlatformLatLngBounds *bounds; +@property(nonatomic, assign) double padding; @end /// Pigeon equivalent of NewLatLngZoom @interface FGMPlatformCameraUpdateNewLatLngZoom : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithLatLng:(FGMPlatformLatLng *)latLng - zoom:(double )zoom; -@property(nonatomic, strong) FGMPlatformLatLng * latLng; -@property(nonatomic, assign) double zoom; ++ (instancetype)makeWithLatLng:(FGMPlatformLatLng *)latLng zoom:(double)zoom; +@property(nonatomic, strong) FGMPlatformLatLng *latLng; +@property(nonatomic, assign) double zoom; @end /// Pigeon equivalent of ScrollBy @interface FGMPlatformCameraUpdateScrollBy : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithDx:(double )dx - dy:(double )dy; -@property(nonatomic, assign) double dx; -@property(nonatomic, assign) double dy; ++ (instancetype)makeWithDx:(double)dx dy:(double)dy; +@property(nonatomic, assign) double dx; +@property(nonatomic, assign) double dy; @end /// Pigeon equivalent of ZoomBy @interface FGMPlatformCameraUpdateZoomBy : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithAmount:(double )amount - focus:(nullable FGMPlatformPoint *)focus; -@property(nonatomic, assign) double amount; -@property(nonatomic, strong, nullable) FGMPlatformPoint * focus; ++ (instancetype)makeWithAmount:(double)amount focus:(nullable FGMPlatformPoint *)focus; +@property(nonatomic, assign) double amount; +@property(nonatomic, strong, nullable) FGMPlatformPoint *focus; @end /// Pigeon equivalent of ZoomIn/ZoomOut @interface FGMPlatformCameraUpdateZoom : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithOut:(BOOL )out; -@property(nonatomic, assign) BOOL out; ++ (instancetype)makeWithOut:(BOOL)out; +@property(nonatomic, assign) BOOL out; @end /// Pigeon equivalent of ZoomTo @interface FGMPlatformCameraUpdateZoomTo : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithZoom:(double )zoom; -@property(nonatomic, assign) double zoom; ++ (instancetype)makeWithZoom:(double)zoom; +@property(nonatomic, assign) double zoom; @end /// Pigeon equivalent of the Circle class. @interface FGMPlatformCircle : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithConsumeTapEvents:(BOOL )consumeTapEvents - fillColor:(NSInteger )fillColor - strokeColor:(NSInteger )strokeColor - visible:(BOOL )visible - strokeWidth:(NSInteger )strokeWidth - zIndex:(double )zIndex - center:(FGMPlatformLatLng *)center - radius:(double )radius - circleId:(NSString *)circleId; -@property(nonatomic, assign) BOOL consumeTapEvents; -@property(nonatomic, assign) NSInteger fillColor; -@property(nonatomic, assign) NSInteger strokeColor; -@property(nonatomic, assign) BOOL visible; -@property(nonatomic, assign) NSInteger strokeWidth; -@property(nonatomic, assign) double zIndex; -@property(nonatomic, strong) FGMPlatformLatLng * center; -@property(nonatomic, assign) double radius; -@property(nonatomic, copy) NSString * circleId; ++ (instancetype)makeWithConsumeTapEvents:(BOOL)consumeTapEvents + fillColor:(NSInteger)fillColor + strokeColor:(NSInteger)strokeColor + visible:(BOOL)visible + strokeWidth:(NSInteger)strokeWidth + zIndex:(double)zIndex + center:(FGMPlatformLatLng *)center + radius:(double)radius + circleId:(NSString *)circleId; +@property(nonatomic, assign) BOOL consumeTapEvents; +@property(nonatomic, assign) NSInteger fillColor; +@property(nonatomic, assign) NSInteger strokeColor; +@property(nonatomic, assign) BOOL visible; +@property(nonatomic, assign) NSInteger strokeWidth; +@property(nonatomic, assign) double zIndex; +@property(nonatomic, strong) FGMPlatformLatLng *center; +@property(nonatomic, assign) double radius; +@property(nonatomic, copy) NSString *circleId; @end /// Pigeon equivalent of the Heatmap class. @interface FGMPlatformHeatmap : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithJson:(id )json; ++ (instancetype)makeWithJson:(id)json; /// The heatmap data, as JSON. This should only be set from /// Heatmap.toJson, and the native code must interpret it according to the /// internal implementation details of that method. -@property(nonatomic, strong) id json; +@property(nonatomic, strong) id json; @end /// Pigeon equivalent of the InfoWindow class. @@ -244,11 +240,11 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithTitle:(nullable NSString *)title - snippet:(nullable NSString *)snippet - anchor:(FGMPlatformPoint *)anchor; -@property(nonatomic, copy, nullable) NSString * title; -@property(nonatomic, copy, nullable) NSString * snippet; -@property(nonatomic, strong) FGMPlatformPoint * anchor; + snippet:(nullable NSString *)snippet + anchor:(FGMPlatformPoint *)anchor; +@property(nonatomic, copy, nullable) NSString *title; +@property(nonatomic, copy, nullable) NSString *snippet; +@property(nonatomic, strong) FGMPlatformPoint *anchor; @end /// Pigeon equivalent of Cluster. @@ -256,13 +252,13 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithClusterManagerId:(NSString *)clusterManagerId - position:(FGMPlatformLatLng *)position - bounds:(FGMPlatformLatLngBounds *)bounds - markerIds:(NSArray *)markerIds; -@property(nonatomic, copy) NSString * clusterManagerId; -@property(nonatomic, strong) FGMPlatformLatLng * position; -@property(nonatomic, strong) FGMPlatformLatLngBounds * bounds; -@property(nonatomic, copy) NSArray * markerIds; + position:(FGMPlatformLatLng *)position + bounds:(FGMPlatformLatLngBounds *)bounds + markerIds:(NSArray *)markerIds; +@property(nonatomic, copy) NSString *clusterManagerId; +@property(nonatomic, strong) FGMPlatformLatLng *position; +@property(nonatomic, strong) FGMPlatformLatLngBounds *bounds; +@property(nonatomic, copy) NSArray *markerIds; @end /// Pigeon equivalent of the ClusterManager class. @@ -270,39 +266,39 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithIdentifier:(NSString *)identifier; -@property(nonatomic, copy) NSString * identifier; +@property(nonatomic, copy) NSString *identifier; @end /// Pigeon equivalent of the Marker class. @interface FGMPlatformMarker : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithAlpha:(double )alpha - anchor:(FGMPlatformPoint *)anchor - consumeTapEvents:(BOOL )consumeTapEvents - draggable:(BOOL )draggable - flat:(BOOL )flat - icon:(FGMPlatformBitmap *)icon - infoWindow:(FGMPlatformInfoWindow *)infoWindow - position:(FGMPlatformLatLng *)position - rotation:(double )rotation - visible:(BOOL )visible - zIndex:(double )zIndex - markerId:(NSString *)markerId - clusterManagerId:(nullable NSString *)clusterManagerId; -@property(nonatomic, assign) double alpha; -@property(nonatomic, strong) FGMPlatformPoint * anchor; -@property(nonatomic, assign) BOOL consumeTapEvents; -@property(nonatomic, assign) BOOL draggable; -@property(nonatomic, assign) BOOL flat; -@property(nonatomic, strong) FGMPlatformBitmap * icon; -@property(nonatomic, strong) FGMPlatformInfoWindow * infoWindow; -@property(nonatomic, strong) FGMPlatformLatLng * position; -@property(nonatomic, assign) double rotation; -@property(nonatomic, assign) BOOL visible; -@property(nonatomic, assign) double zIndex; -@property(nonatomic, copy) NSString * markerId; -@property(nonatomic, copy, nullable) NSString * clusterManagerId; ++ (instancetype)makeWithAlpha:(double)alpha + anchor:(FGMPlatformPoint *)anchor + consumeTapEvents:(BOOL)consumeTapEvents + draggable:(BOOL)draggable + flat:(BOOL)flat + icon:(FGMPlatformBitmap *)icon + infoWindow:(FGMPlatformInfoWindow *)infoWindow + position:(FGMPlatformLatLng *)position + rotation:(double)rotation + visible:(BOOL)visible + zIndex:(double)zIndex + markerId:(NSString *)markerId + clusterManagerId:(nullable NSString *)clusterManagerId; +@property(nonatomic, assign) double alpha; +@property(nonatomic, strong) FGMPlatformPoint *anchor; +@property(nonatomic, assign) BOOL consumeTapEvents; +@property(nonatomic, assign) BOOL draggable; +@property(nonatomic, assign) BOOL flat; +@property(nonatomic, strong) FGMPlatformBitmap *icon; +@property(nonatomic, strong) FGMPlatformInfoWindow *infoWindow; +@property(nonatomic, strong) FGMPlatformLatLng *position; +@property(nonatomic, assign) double rotation; +@property(nonatomic, assign) BOOL visible; +@property(nonatomic, assign) double zIndex; +@property(nonatomic, copy) NSString *markerId; +@property(nonatomic, copy, nullable) NSString *clusterManagerId; @end /// Pigeon equivalent of the Polygon class. @@ -310,25 +306,25 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithPolygonId:(NSString *)polygonId - consumesTapEvents:(BOOL )consumesTapEvents - fillColor:(NSInteger )fillColor - geodesic:(BOOL )geodesic - points:(NSArray *)points - holes:(NSArray *> *)holes - visible:(BOOL )visible - strokeColor:(NSInteger )strokeColor - strokeWidth:(NSInteger )strokeWidth - zIndex:(NSInteger )zIndex; -@property(nonatomic, copy) NSString * polygonId; -@property(nonatomic, assign) BOOL consumesTapEvents; -@property(nonatomic, assign) NSInteger fillColor; -@property(nonatomic, assign) BOOL geodesic; -@property(nonatomic, copy) NSArray * points; -@property(nonatomic, copy) NSArray *> * holes; -@property(nonatomic, assign) BOOL visible; -@property(nonatomic, assign) NSInteger strokeColor; -@property(nonatomic, assign) NSInteger strokeWidth; -@property(nonatomic, assign) NSInteger zIndex; + consumesTapEvents:(BOOL)consumesTapEvents + fillColor:(NSInteger)fillColor + geodesic:(BOOL)geodesic + points:(NSArray *)points + holes:(NSArray *> *)holes + visible:(BOOL)visible + strokeColor:(NSInteger)strokeColor + strokeWidth:(NSInteger)strokeWidth + zIndex:(NSInteger)zIndex; +@property(nonatomic, copy) NSString *polygonId; +@property(nonatomic, assign) BOOL consumesTapEvents; +@property(nonatomic, assign) NSInteger fillColor; +@property(nonatomic, assign) BOOL geodesic; +@property(nonatomic, copy) NSArray *points; +@property(nonatomic, copy) NSArray *> *holes; +@property(nonatomic, assign) BOOL visible; +@property(nonatomic, assign) NSInteger strokeColor; +@property(nonatomic, assign) NSInteger strokeWidth; +@property(nonatomic, assign) NSInteger zIndex; @end /// Pigeon equivalent of the Polyline class. @@ -336,49 +332,48 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithPolylineId:(NSString *)polylineId - consumesTapEvents:(BOOL )consumesTapEvents - color:(NSInteger )color - geodesic:(BOOL )geodesic - jointType:(FGMPlatformJointType)jointType - patterns:(NSArray *)patterns - points:(NSArray *)points - visible:(BOOL )visible - width:(NSInteger )width - zIndex:(NSInteger )zIndex; -@property(nonatomic, copy) NSString * polylineId; -@property(nonatomic, assign) BOOL consumesTapEvents; -@property(nonatomic, assign) NSInteger color; -@property(nonatomic, assign) BOOL geodesic; + consumesTapEvents:(BOOL)consumesTapEvents + color:(NSInteger)color + geodesic:(BOOL)geodesic + jointType:(FGMPlatformJointType)jointType + patterns:(NSArray *)patterns + points:(NSArray *)points + visible:(BOOL)visible + width:(NSInteger)width + zIndex:(NSInteger)zIndex; +@property(nonatomic, copy) NSString *polylineId; +@property(nonatomic, assign) BOOL consumesTapEvents; +@property(nonatomic, assign) NSInteger color; +@property(nonatomic, assign) BOOL geodesic; /// The joint type. @property(nonatomic, assign) FGMPlatformJointType jointType; /// The pattern data, as a list of pattern items. -@property(nonatomic, copy) NSArray * patterns; -@property(nonatomic, copy) NSArray * points; -@property(nonatomic, assign) BOOL visible; -@property(nonatomic, assign) NSInteger width; -@property(nonatomic, assign) NSInteger zIndex; +@property(nonatomic, copy) NSArray *patterns; +@property(nonatomic, copy) NSArray *points; +@property(nonatomic, assign) BOOL visible; +@property(nonatomic, assign) NSInteger width; +@property(nonatomic, assign) NSInteger zIndex; @end /// Pigeon equivalent of the PatternItem class. @interface FGMPlatformPatternItem : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithType:(FGMPlatformPatternItemType)type - length:(nullable NSNumber *)length; ++ (instancetype)makeWithType:(FGMPlatformPatternItemType)type length:(nullable NSNumber *)length; @property(nonatomic, assign) FGMPlatformPatternItemType type; -@property(nonatomic, strong, nullable) NSNumber * length; +@property(nonatomic, strong, nullable) NSNumber *length; @end /// Pigeon equivalent of the Tile class. @interface FGMPlatformTile : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithWidth:(NSInteger )width - height:(NSInteger )height - data:(nullable FlutterStandardTypedData *)data; -@property(nonatomic, assign) NSInteger width; -@property(nonatomic, assign) NSInteger height; -@property(nonatomic, strong, nullable) FlutterStandardTypedData * data; ++ (instancetype)makeWithWidth:(NSInteger)width + height:(NSInteger)height + data:(nullable FlutterStandardTypedData *)data; +@property(nonatomic, assign) NSInteger width; +@property(nonatomic, assign) NSInteger height; +@property(nonatomic, strong, nullable) FlutterStandardTypedData *data; @end /// Pigeon equivalent of the TileOverlay class. @@ -386,41 +381,37 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithTileOverlayId:(NSString *)tileOverlayId - fadeIn:(BOOL )fadeIn - transparency:(double )transparency - zIndex:(NSInteger )zIndex - visible:(BOOL )visible - tileSize:(NSInteger )tileSize; -@property(nonatomic, copy) NSString * tileOverlayId; -@property(nonatomic, assign) BOOL fadeIn; -@property(nonatomic, assign) double transparency; -@property(nonatomic, assign) NSInteger zIndex; -@property(nonatomic, assign) BOOL visible; -@property(nonatomic, assign) NSInteger tileSize; + fadeIn:(BOOL)fadeIn + transparency:(double)transparency + zIndex:(NSInteger)zIndex + visible:(BOOL)visible + tileSize:(NSInteger)tileSize; +@property(nonatomic, copy) NSString *tileOverlayId; +@property(nonatomic, assign) BOOL fadeIn; +@property(nonatomic, assign) double transparency; +@property(nonatomic, assign) NSInteger zIndex; +@property(nonatomic, assign) BOOL visible; +@property(nonatomic, assign) NSInteger tileSize; @end /// Pigeon equivalent of Flutter's EdgeInsets. @interface FGMPlatformEdgeInsets : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithTop:(double )top - bottom:(double )bottom - left:(double )left - right:(double )right; -@property(nonatomic, assign) double top; -@property(nonatomic, assign) double bottom; -@property(nonatomic, assign) double left; -@property(nonatomic, assign) double right; ++ (instancetype)makeWithTop:(double)top bottom:(double)bottom left:(double)left right:(double)right; +@property(nonatomic, assign) double top; +@property(nonatomic, assign) double bottom; +@property(nonatomic, assign) double left; +@property(nonatomic, assign) double right; @end /// Pigeon equivalent of LatLng. @interface FGMPlatformLatLng : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithLatitude:(double )latitude - longitude:(double )longitude; -@property(nonatomic, assign) double latitude; -@property(nonatomic, assign) double longitude; ++ (instancetype)makeWithLatitude:(double)latitude longitude:(double)longitude; +@property(nonatomic, assign) double latitude; +@property(nonatomic, assign) double longitude; @end /// Pigeon equivalent of LatLngBounds. @@ -428,9 +419,9 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithNortheast:(FGMPlatformLatLng *)northeast - southwest:(FGMPlatformLatLng *)southwest; -@property(nonatomic, strong) FGMPlatformLatLng * northeast; -@property(nonatomic, strong) FGMPlatformLatLng * southwest; + southwest:(FGMPlatformLatLng *)southwest; +@property(nonatomic, strong) FGMPlatformLatLng *northeast; +@property(nonatomic, strong) FGMPlatformLatLng *southwest; @end /// Pigeon equivalent of CameraTargetBounds. @@ -439,111 +430,109 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// a target, and having an explicitly unbounded target (null [bounds]). @interface FGMPlatformCameraTargetBounds : NSObject + (instancetype)makeWithBounds:(nullable FGMPlatformLatLngBounds *)bounds; -@property(nonatomic, strong, nullable) FGMPlatformLatLngBounds * bounds; +@property(nonatomic, strong, nullable) FGMPlatformLatLngBounds *bounds; @end /// Information passed to the platform view creation. @interface FGMPlatformMapViewCreationParams : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithInitialCameraPosition:(FGMPlatformCameraPosition *)initialCameraPosition - mapConfiguration:(FGMPlatformMapConfiguration *)mapConfiguration - initialCircles:(NSArray *)initialCircles - initialMarkers:(NSArray *)initialMarkers - initialPolygons:(NSArray *)initialPolygons - initialPolylines:(NSArray *)initialPolylines - initialHeatmaps:(NSArray *)initialHeatmaps - initialTileOverlays:(NSArray *)initialTileOverlays - initialClusterManagers:(NSArray *)initialClusterManagers; -@property(nonatomic, strong) FGMPlatformCameraPosition * initialCameraPosition; -@property(nonatomic, strong) FGMPlatformMapConfiguration * mapConfiguration; -@property(nonatomic, copy) NSArray * initialCircles; -@property(nonatomic, copy) NSArray * initialMarkers; -@property(nonatomic, copy) NSArray * initialPolygons; -@property(nonatomic, copy) NSArray * initialPolylines; -@property(nonatomic, copy) NSArray * initialHeatmaps; -@property(nonatomic, copy) NSArray * initialTileOverlays; -@property(nonatomic, copy) NSArray * initialClusterManagers; ++ (instancetype) + makeWithInitialCameraPosition:(FGMPlatformCameraPosition *)initialCameraPosition + mapConfiguration:(FGMPlatformMapConfiguration *)mapConfiguration + initialCircles:(NSArray *)initialCircles + initialMarkers:(NSArray *)initialMarkers + initialPolygons:(NSArray *)initialPolygons + initialPolylines:(NSArray *)initialPolylines + initialHeatmaps:(NSArray *)initialHeatmaps + initialTileOverlays:(NSArray *)initialTileOverlays + initialClusterManagers:(NSArray *)initialClusterManagers; +@property(nonatomic, strong) FGMPlatformCameraPosition *initialCameraPosition; +@property(nonatomic, strong) FGMPlatformMapConfiguration *mapConfiguration; +@property(nonatomic, copy) NSArray *initialCircles; +@property(nonatomic, copy) NSArray *initialMarkers; +@property(nonatomic, copy) NSArray *initialPolygons; +@property(nonatomic, copy) NSArray *initialPolylines; +@property(nonatomic, copy) NSArray *initialHeatmaps; +@property(nonatomic, copy) NSArray *initialTileOverlays; +@property(nonatomic, copy) NSArray *initialClusterManagers; @end /// Pigeon equivalent of MapConfiguration. @interface FGMPlatformMapConfiguration : NSObject + (instancetype)makeWithCompassEnabled:(nullable NSNumber *)compassEnabled - cameraTargetBounds:(nullable FGMPlatformCameraTargetBounds *)cameraTargetBounds - mapType:(nullable FGMPlatformMapTypeBox *)mapType - minMaxZoomPreference:(nullable FGMPlatformZoomRange *)minMaxZoomPreference - rotateGesturesEnabled:(nullable NSNumber *)rotateGesturesEnabled - scrollGesturesEnabled:(nullable NSNumber *)scrollGesturesEnabled - tiltGesturesEnabled:(nullable NSNumber *)tiltGesturesEnabled - trackCameraPosition:(nullable NSNumber *)trackCameraPosition - zoomGesturesEnabled:(nullable NSNumber *)zoomGesturesEnabled - myLocationEnabled:(nullable NSNumber *)myLocationEnabled - myLocationButtonEnabled:(nullable NSNumber *)myLocationButtonEnabled - padding:(nullable FGMPlatformEdgeInsets *)padding - indoorViewEnabled:(nullable NSNumber *)indoorViewEnabled - trafficEnabled:(nullable NSNumber *)trafficEnabled - buildingsEnabled:(nullable NSNumber *)buildingsEnabled - cloudMapId:(nullable NSString *)cloudMapId - style:(nullable NSString *)style; -@property(nonatomic, strong, nullable) NSNumber * compassEnabled; -@property(nonatomic, strong, nullable) FGMPlatformCameraTargetBounds * cameraTargetBounds; -@property(nonatomic, strong, nullable) FGMPlatformMapTypeBox * mapType; -@property(nonatomic, strong, nullable) FGMPlatformZoomRange * minMaxZoomPreference; -@property(nonatomic, strong, nullable) NSNumber * rotateGesturesEnabled; -@property(nonatomic, strong, nullable) NSNumber * scrollGesturesEnabled; -@property(nonatomic, strong, nullable) NSNumber * tiltGesturesEnabled; -@property(nonatomic, strong, nullable) NSNumber * trackCameraPosition; -@property(nonatomic, strong, nullable) NSNumber * zoomGesturesEnabled; -@property(nonatomic, strong, nullable) NSNumber * myLocationEnabled; -@property(nonatomic, strong, nullable) NSNumber * myLocationButtonEnabled; -@property(nonatomic, strong, nullable) FGMPlatformEdgeInsets * padding; -@property(nonatomic, strong, nullable) NSNumber * indoorViewEnabled; -@property(nonatomic, strong, nullable) NSNumber * trafficEnabled; -@property(nonatomic, strong, nullable) NSNumber * buildingsEnabled; -@property(nonatomic, copy, nullable) NSString * cloudMapId; -@property(nonatomic, copy, nullable) NSString * style; + cameraTargetBounds:(nullable FGMPlatformCameraTargetBounds *)cameraTargetBounds + mapType:(nullable FGMPlatformMapTypeBox *)mapType + minMaxZoomPreference:(nullable FGMPlatformZoomRange *)minMaxZoomPreference + rotateGesturesEnabled:(nullable NSNumber *)rotateGesturesEnabled + scrollGesturesEnabled:(nullable NSNumber *)scrollGesturesEnabled + tiltGesturesEnabled:(nullable NSNumber *)tiltGesturesEnabled + trackCameraPosition:(nullable NSNumber *)trackCameraPosition + zoomGesturesEnabled:(nullable NSNumber *)zoomGesturesEnabled + myLocationEnabled:(nullable NSNumber *)myLocationEnabled + myLocationButtonEnabled:(nullable NSNumber *)myLocationButtonEnabled + padding:(nullable FGMPlatformEdgeInsets *)padding + indoorViewEnabled:(nullable NSNumber *)indoorViewEnabled + trafficEnabled:(nullable NSNumber *)trafficEnabled + buildingsEnabled:(nullable NSNumber *)buildingsEnabled + cloudMapId:(nullable NSString *)cloudMapId + style:(nullable NSString *)style; +@property(nonatomic, strong, nullable) NSNumber *compassEnabled; +@property(nonatomic, strong, nullable) FGMPlatformCameraTargetBounds *cameraTargetBounds; +@property(nonatomic, strong, nullable) FGMPlatformMapTypeBox *mapType; +@property(nonatomic, strong, nullable) FGMPlatformZoomRange *minMaxZoomPreference; +@property(nonatomic, strong, nullable) NSNumber *rotateGesturesEnabled; +@property(nonatomic, strong, nullable) NSNumber *scrollGesturesEnabled; +@property(nonatomic, strong, nullable) NSNumber *tiltGesturesEnabled; +@property(nonatomic, strong, nullable) NSNumber *trackCameraPosition; +@property(nonatomic, strong, nullable) NSNumber *zoomGesturesEnabled; +@property(nonatomic, strong, nullable) NSNumber *myLocationEnabled; +@property(nonatomic, strong, nullable) NSNumber *myLocationButtonEnabled; +@property(nonatomic, strong, nullable) FGMPlatformEdgeInsets *padding; +@property(nonatomic, strong, nullable) NSNumber *indoorViewEnabled; +@property(nonatomic, strong, nullable) NSNumber *trafficEnabled; +@property(nonatomic, strong, nullable) NSNumber *buildingsEnabled; +@property(nonatomic, copy, nullable) NSString *cloudMapId; +@property(nonatomic, copy, nullable) NSString *style; @end /// Pigeon representation of an x,y coordinate. @interface FGMPlatformPoint : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithX:(double )x - y:(double )y; -@property(nonatomic, assign) double x; -@property(nonatomic, assign) double y; ++ (instancetype)makeWithX:(double)x y:(double)y; +@property(nonatomic, assign) double x; +@property(nonatomic, assign) double y; @end /// Pigeon representation of a size. @interface FGMPlatformSize : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithWidth:(double )width - height:(double )height; -@property(nonatomic, assign) double width; -@property(nonatomic, assign) double height; ++ (instancetype)makeWithWidth:(double)width height:(double)height; +@property(nonatomic, assign) double width; +@property(nonatomic, assign) double height; @end /// Pigeon equivalent of GMSTileLayer properties. @interface FGMPlatformTileLayer : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithVisible:(BOOL )visible - fadeIn:(BOOL )fadeIn - opacity:(double )opacity - zIndex:(NSInteger )zIndex; -@property(nonatomic, assign) BOOL visible; -@property(nonatomic, assign) BOOL fadeIn; -@property(nonatomic, assign) double opacity; -@property(nonatomic, assign) NSInteger zIndex; ++ (instancetype)makeWithVisible:(BOOL)visible + fadeIn:(BOOL)fadeIn + opacity:(double)opacity + zIndex:(NSInteger)zIndex; +@property(nonatomic, assign) BOOL visible; +@property(nonatomic, assign) BOOL fadeIn; +@property(nonatomic, assign) double opacity; +@property(nonatomic, assign) NSInteger zIndex; @end /// Pigeon equivalent of MinMaxZoomPreference. @interface FGMPlatformZoomRange : NSObject -+ (instancetype)makeWithMin:(nullable NSNumber *)min - max:(nullable NSNumber *)max; -@property(nonatomic, strong, nullable) NSNumber * min; -@property(nonatomic, strong, nullable) NSNumber * max; ++ (instancetype)makeWithMin:(nullable NSNumber *)min max:(nullable NSNumber *)max; +@property(nonatomic, strong, nullable) NSNumber *min; +@property(nonatomic, strong, nullable) NSNumber *max; @end /// Pigeon equivalent of [BitmapDescriptor]. As there are multiple disjoint @@ -552,7 +541,7 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { @interface FGMPlatformBitmap : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithBitmap:(id )bitmap; ++ (instancetype)makeWithBitmap:(id)bitmap; /// One of [PlatformBitmapAssetMap], [PlatformBitmapAsset], /// [PlatformBitmapAssetImage], [PlatformBitmapBytesMap], /// [PlatformBitmapBytes], or [PlatformBitmapDefaultMarker]. @@ -560,13 +549,13 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// approach allows for the different bitmap implementations to be valid /// argument and return types of the API methods. See /// https://github.com/flutter/flutter/issues/117819. -@property(nonatomic, strong) id bitmap; +@property(nonatomic, strong) id bitmap; @end /// Pigeon equivalent of [DefaultMarker]. @interface FGMPlatformBitmapDefaultMarker : NSObject + (instancetype)makeWithHue:(nullable NSNumber *)hue; -@property(nonatomic, strong, nullable) NSNumber * hue; +@property(nonatomic, strong, nullable) NSNumber *hue; @end /// Pigeon equivalent of [BytesBitmap]. @@ -574,19 +563,18 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithByteData:(FlutterStandardTypedData *)byteData - size:(nullable FGMPlatformSize *)size; -@property(nonatomic, strong) FlutterStandardTypedData * byteData; -@property(nonatomic, strong, nullable) FGMPlatformSize * size; + size:(nullable FGMPlatformSize *)size; +@property(nonatomic, strong) FlutterStandardTypedData *byteData; +@property(nonatomic, strong, nullable) FGMPlatformSize *size; @end /// Pigeon equivalent of [AssetBitmap]. @interface FGMPlatformBitmapAsset : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithName:(NSString *)name - pkg:(nullable NSString *)pkg; -@property(nonatomic, copy) NSString * name; -@property(nonatomic, copy, nullable) NSString * pkg; ++ (instancetype)makeWithName:(NSString *)name pkg:(nullable NSString *)pkg; +@property(nonatomic, copy) NSString *name; +@property(nonatomic, copy, nullable) NSString *pkg; @end /// Pigeon equivalent of [AssetImageBitmap]. @@ -594,11 +582,11 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithName:(NSString *)name - scale:(double )scale - size:(nullable FGMPlatformSize *)size; -@property(nonatomic, copy) NSString * name; -@property(nonatomic, assign) double scale; -@property(nonatomic, strong, nullable) FGMPlatformSize * size; + scale:(double)scale + size:(nullable FGMPlatformSize *)size; +@property(nonatomic, copy) NSString *name; +@property(nonatomic, assign) double scale; +@property(nonatomic, strong, nullable) FGMPlatformSize *size; @end /// Pigeon equivalent of [AssetMapBitmap]. @@ -606,15 +594,15 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithAssetName:(NSString *)assetName - bitmapScaling:(FGMPlatformMapBitmapScaling)bitmapScaling - imagePixelRatio:(double )imagePixelRatio - width:(nullable NSNumber *)width - height:(nullable NSNumber *)height; -@property(nonatomic, copy) NSString * assetName; + bitmapScaling:(FGMPlatformMapBitmapScaling)bitmapScaling + imagePixelRatio:(double)imagePixelRatio + width:(nullable NSNumber *)width + height:(nullable NSNumber *)height; +@property(nonatomic, copy) NSString *assetName; @property(nonatomic, assign) FGMPlatformMapBitmapScaling bitmapScaling; -@property(nonatomic, assign) double imagePixelRatio; -@property(nonatomic, strong, nullable) NSNumber * width; -@property(nonatomic, strong, nullable) NSNumber * height; +@property(nonatomic, assign) double imagePixelRatio; +@property(nonatomic, strong, nullable) NSNumber *width; +@property(nonatomic, strong, nullable) NSNumber *height; @end /// Pigeon equivalent of [BytesMapBitmap]. @@ -622,23 +610,23 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithByteData:(FlutterStandardTypedData *)byteData - bitmapScaling:(FGMPlatformMapBitmapScaling)bitmapScaling - imagePixelRatio:(double )imagePixelRatio - width:(nullable NSNumber *)width - height:(nullable NSNumber *)height; -@property(nonatomic, strong) FlutterStandardTypedData * byteData; + bitmapScaling:(FGMPlatformMapBitmapScaling)bitmapScaling + imagePixelRatio:(double)imagePixelRatio + width:(nullable NSNumber *)width + height:(nullable NSNumber *)height; +@property(nonatomic, strong) FlutterStandardTypedData *byteData; @property(nonatomic, assign) FGMPlatformMapBitmapScaling bitmapScaling; -@property(nonatomic, assign) double imagePixelRatio; -@property(nonatomic, strong, nullable) NSNumber * width; -@property(nonatomic, strong, nullable) NSNumber * height; +@property(nonatomic, assign) double imagePixelRatio; +@property(nonatomic, strong, nullable) NSNumber *width; +@property(nonatomic, strong, nullable) NSNumber *height; @end /// Pigeon equivalent of a registered bitmap. @interface FGMPlatformBitmapRegisteredMapBitmap : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)makeWithId:(NSInteger )id; -@property(nonatomic, assign) NSInteger id; ++ (instancetype)makeWithId:(NSInteger)id; +@property(nonatomic, assign) NSInteger id; @end /// The codec used by all APIs. @@ -654,51 +642,80 @@ NSObject *FGMGetMessagesCodec(void); /// /// Only non-null configuration values will result in updates; options with /// null values will remain unchanged. -- (void)updateWithMapConfiguration:(FGMPlatformMapConfiguration *)configuration error:(FlutterError *_Nullable *_Nonnull)error; +- (void)updateWithMapConfiguration:(FGMPlatformMapConfiguration *)configuration + error:(FlutterError *_Nullable *_Nonnull)error; /// Updates the set of circles on the map. -- (void)updateCirclesByAdding:(NSArray *)toAdd changing:(NSArray *)toChange removing:(NSArray *)idsToRemove error:(FlutterError *_Nullable *_Nonnull)error; +- (void)updateCirclesByAdding:(NSArray *)toAdd + changing:(NSArray *)toChange + removing:(NSArray *)idsToRemove + error:(FlutterError *_Nullable *_Nonnull)error; /// Updates the set of heatmaps on the map. -- (void)updateHeatmapsByAdding:(NSArray *)toAdd changing:(NSArray *)toChange removing:(NSArray *)idsToRemove error:(FlutterError *_Nullable *_Nonnull)error; +- (void)updateHeatmapsByAdding:(NSArray *)toAdd + changing:(NSArray *)toChange + removing:(NSArray *)idsToRemove + error:(FlutterError *_Nullable *_Nonnull)error; /// Updates the set of custer managers for clusters on the map. -- (void)updateClusterManagersByAdding:(NSArray *)toAdd removing:(NSArray *)idsToRemove error:(FlutterError *_Nullable *_Nonnull)error; +- (void)updateClusterManagersByAdding:(NSArray *)toAdd + removing:(NSArray *)idsToRemove + error:(FlutterError *_Nullable *_Nonnull)error; /// Updates the set of markers on the map. -- (void)updateMarkersByAdding:(NSArray *)toAdd changing:(NSArray *)toChange removing:(NSArray *)idsToRemove error:(FlutterError *_Nullable *_Nonnull)error; +- (void)updateMarkersByAdding:(NSArray *)toAdd + changing:(NSArray *)toChange + removing:(NSArray *)idsToRemove + error:(FlutterError *_Nullable *_Nonnull)error; /// Updates the set of polygonss on the map. -- (void)updatePolygonsByAdding:(NSArray *)toAdd changing:(NSArray *)toChange removing:(NSArray *)idsToRemove error:(FlutterError *_Nullable *_Nonnull)error; +- (void)updatePolygonsByAdding:(NSArray *)toAdd + changing:(NSArray *)toChange + removing:(NSArray *)idsToRemove + error:(FlutterError *_Nullable *_Nonnull)error; /// Updates the set of polylines on the map. -- (void)updatePolylinesByAdding:(NSArray *)toAdd changing:(NSArray *)toChange removing:(NSArray *)idsToRemove error:(FlutterError *_Nullable *_Nonnull)error; +- (void)updatePolylinesByAdding:(NSArray *)toAdd + changing:(NSArray *)toChange + removing:(NSArray *)idsToRemove + error:(FlutterError *_Nullable *_Nonnull)error; /// Updates the set of tile overlays on the map. -- (void)updateTileOverlaysByAdding:(NSArray *)toAdd changing:(NSArray *)toChange removing:(NSArray *)idsToRemove error:(FlutterError *_Nullable *_Nonnull)error; +- (void)updateTileOverlaysByAdding:(NSArray *)toAdd + changing:(NSArray *)toChange + removing:(NSArray *)idsToRemove + error:(FlutterError *_Nullable *_Nonnull)error; /// Gets the screen coordinate for the given map location. /// /// @return `nil` only when `error != nil`. -- (nullable FGMPlatformPoint *)screenCoordinatesForLatLng:(FGMPlatformLatLng *)latLng error:(FlutterError *_Nullable *_Nonnull)error; +- (nullable FGMPlatformPoint *)screenCoordinatesForLatLng:(FGMPlatformLatLng *)latLng + error:(FlutterError *_Nullable *_Nonnull)error; /// Gets the map location for the given screen coordinate. /// /// @return `nil` only when `error != nil`. -- (nullable FGMPlatformLatLng *)latLngForScreenCoordinate:(FGMPlatformPoint *)screenCoordinate error:(FlutterError *_Nullable *_Nonnull)error; +- (nullable FGMPlatformLatLng *)latLngForScreenCoordinate:(FGMPlatformPoint *)screenCoordinate + error:(FlutterError *_Nullable *_Nonnull)error; /// Gets the map region currently displayed on the map. /// /// @return `nil` only when `error != nil`. - (nullable FGMPlatformLatLngBounds *)visibleMapRegion:(FlutterError *_Nullable *_Nonnull)error; /// Moves the camera according to [cameraUpdate] immediately, with no /// animation. -- (void)moveCameraWithUpdate:(FGMPlatformCameraUpdate *)cameraUpdate error:(FlutterError *_Nullable *_Nonnull)error; +- (void)moveCameraWithUpdate:(FGMPlatformCameraUpdate *)cameraUpdate + error:(FlutterError *_Nullable *_Nonnull)error; /// Moves the camera according to [cameraUpdate], animating the update. -- (void)animateCameraWithUpdate:(FGMPlatformCameraUpdate *)cameraUpdate error:(FlutterError *_Nullable *_Nonnull)error; +- (void)animateCameraWithUpdate:(FGMPlatformCameraUpdate *)cameraUpdate + error:(FlutterError *_Nullable *_Nonnull)error; /// Gets the current map zoom level. /// /// @return `nil` only when `error != nil`. - (nullable NSNumber *)currentZoomLevel:(FlutterError *_Nullable *_Nonnull)error; /// Show the info window for the marker with the given ID. -- (void)showInfoWindowForMarkerWithIdentifier:(NSString *)markerId error:(FlutterError *_Nullable *_Nonnull)error; +- (void)showInfoWindowForMarkerWithIdentifier:(NSString *)markerId + error:(FlutterError *_Nullable *_Nonnull)error; /// Hide the info window for the marker with the given ID. -- (void)hideInfoWindowForMarkerWithIdentifier:(NSString *)markerId error:(FlutterError *_Nullable *_Nonnull)error; +- (void)hideInfoWindowForMarkerWithIdentifier:(NSString *)markerId + error:(FlutterError *_Nullable *_Nonnull)error; /// Returns true if the marker with the given ID is currently displaying its /// info window. /// /// @return `nil` only when `error != nil`. -- (nullable NSNumber *)isShowingInfoWindowForMarkerWithIdentifier:(NSString *)markerId error:(FlutterError *_Nullable *_Nonnull)error; +- (nullable NSNumber *) + isShowingInfoWindowForMarkerWithIdentifier:(NSString *)markerId + error:(FlutterError *_Nullable *_Nonnull)error; /// Sets the style to the given map style string, where an empty string /// indicates that the style should be cleared. /// @@ -712,64 +729,90 @@ NSObject *FGMGetMessagesCodec(void); /// is no way to return failures from map initialization. - (nullable NSString *)lastStyleError:(FlutterError *_Nullable *_Nonnull)error; /// Clears the cache of tiles previously requseted from the tile provider. -- (void)clearTileCacheForOverlayWithIdentifier:(NSString *)tileOverlayId error:(FlutterError *_Nullable *_Nonnull)error; +- (void)clearTileCacheForOverlayWithIdentifier:(NSString *)tileOverlayId + error:(FlutterError *_Nullable *_Nonnull)error; /// Takes a snapshot of the map and returns its image data. -- (nullable FlutterStandardTypedData *)takeSnapshotWithError:(FlutterError *_Nullable *_Nonnull)error; +- (nullable FlutterStandardTypedData *)takeSnapshotWithError: + (FlutterError *_Nullable *_Nonnull)error; @end -extern void SetUpFGMMapsApi(id binaryMessenger, NSObject *_Nullable api); - -extern void SetUpFGMMapsApiWithSuffix(id binaryMessenger, NSObject *_Nullable api, NSString *messageChannelSuffix); +extern void SetUpFGMMapsApi(id binaryMessenger, + NSObject *_Nullable api); +extern void SetUpFGMMapsApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); /// Interface for calls from the native SDK to Dart. @interface FGMMapsCallbackApi : NSObject - (instancetype)initWithBinaryMessenger:(id)binaryMessenger; -- (instancetype)initWithBinaryMessenger:(id)binaryMessenger messageChannelSuffix:(nullable NSString *)messageChannelSuffix; +- (instancetype)initWithBinaryMessenger:(id)binaryMessenger + messageChannelSuffix:(nullable NSString *)messageChannelSuffix; /// Called when the map camera starts moving. - (void)didStartCameraMoveWithCompletion:(void (^)(FlutterError *_Nullable))completion; /// Called when the map camera moves. -- (void)didMoveCameraToPosition:(FGMPlatformCameraPosition *)cameraPosition completion:(void (^)(FlutterError *_Nullable))completion; +- (void)didMoveCameraToPosition:(FGMPlatformCameraPosition *)cameraPosition + completion:(void (^)(FlutterError *_Nullable))completion; /// Called when the map camera stops moving. - (void)didIdleCameraWithCompletion:(void (^)(FlutterError *_Nullable))completion; /// Called when the map, not a specifc map object, is tapped. -- (void)didTapAtPosition:(FGMPlatformLatLng *)position completion:(void (^)(FlutterError *_Nullable))completion; +- (void)didTapAtPosition:(FGMPlatformLatLng *)position + completion:(void (^)(FlutterError *_Nullable))completion; /// Called when the map, not a specifc map object, is long pressed. -- (void)didLongPressAtPosition:(FGMPlatformLatLng *)position completion:(void (^)(FlutterError *_Nullable))completion; +- (void)didLongPressAtPosition:(FGMPlatformLatLng *)position + completion:(void (^)(FlutterError *_Nullable))completion; /// Called when a marker is tapped. -- (void)didTapMarkerWithIdentifier:(NSString *)markerId completion:(void (^)(FlutterError *_Nullable))completion; +- (void)didTapMarkerWithIdentifier:(NSString *)markerId + completion:(void (^)(FlutterError *_Nullable))completion; /// Called when a marker drag starts. -- (void)didStartDragForMarkerWithIdentifier:(NSString *)markerId atPosition:(FGMPlatformLatLng *)position completion:(void (^)(FlutterError *_Nullable))completion; +- (void)didStartDragForMarkerWithIdentifier:(NSString *)markerId + atPosition:(FGMPlatformLatLng *)position + completion:(void (^)(FlutterError *_Nullable))completion; /// Called when a marker drag updates. -- (void)didDragMarkerWithIdentifier:(NSString *)markerId atPosition:(FGMPlatformLatLng *)position completion:(void (^)(FlutterError *_Nullable))completion; +- (void)didDragMarkerWithIdentifier:(NSString *)markerId + atPosition:(FGMPlatformLatLng *)position + completion:(void (^)(FlutterError *_Nullable))completion; /// Called when a marker drag ends. -- (void)didEndDragForMarkerWithIdentifier:(NSString *)markerId atPosition:(FGMPlatformLatLng *)position completion:(void (^)(FlutterError *_Nullable))completion; +- (void)didEndDragForMarkerWithIdentifier:(NSString *)markerId + atPosition:(FGMPlatformLatLng *)position + completion:(void (^)(FlutterError *_Nullable))completion; /// Called when a marker's info window is tapped. -- (void)didTapInfoWindowOfMarkerWithIdentifier:(NSString *)markerId completion:(void (^)(FlutterError *_Nullable))completion; +- (void)didTapInfoWindowOfMarkerWithIdentifier:(NSString *)markerId + completion:(void (^)(FlutterError *_Nullable))completion; /// Called when a circle is tapped. -- (void)didTapCircleWithIdentifier:(NSString *)circleId completion:(void (^)(FlutterError *_Nullable))completion; +- (void)didTapCircleWithIdentifier:(NSString *)circleId + completion:(void (^)(FlutterError *_Nullable))completion; /// Called when a marker cluster is tapped. -- (void)didTapCluster:(FGMPlatformCluster *)cluster completion:(void (^)(FlutterError *_Nullable))completion; +- (void)didTapCluster:(FGMPlatformCluster *)cluster + completion:(void (^)(FlutterError *_Nullable))completion; /// Called when a polygon is tapped. -- (void)didTapPolygonWithIdentifier:(NSString *)polygonId completion:(void (^)(FlutterError *_Nullable))completion; +- (void)didTapPolygonWithIdentifier:(NSString *)polygonId + completion:(void (^)(FlutterError *_Nullable))completion; /// Called when a polyline is tapped. -- (void)didTapPolylineWithIdentifier:(NSString *)polylineId completion:(void (^)(FlutterError *_Nullable))completion; +- (void)didTapPolylineWithIdentifier:(NSString *)polylineId + completion:(void (^)(FlutterError *_Nullable))completion; /// Called to get data for a map tile. -- (void)tileWithOverlayIdentifier:(NSString *)tileOverlayId location:(FGMPlatformPoint *)location zoom:(NSInteger)zoom completion:(void (^)(FGMPlatformTile *_Nullable, FlutterError *_Nullable))completion; +- (void)tileWithOverlayIdentifier:(NSString *)tileOverlayId + location:(FGMPlatformPoint *)location + zoom:(NSInteger)zoom + completion:(void (^)(FGMPlatformTile *_Nullable, + FlutterError *_Nullable))completion; @end - /// Dummy interface to force generation of the platform view creation params, /// which are not used in any Pigeon calls, only the platform view creation /// call made internally by Flutter. @protocol FGMMapsPlatformViewApi -- (void)createViewType:(nullable FGMPlatformMapViewCreationParams *)type error:(FlutterError *_Nullable *_Nonnull)error; +- (void)createViewType:(nullable FGMPlatformMapViewCreationParams *)type + error:(FlutterError *_Nullable *_Nonnull)error; @end -extern void SetUpFGMMapsPlatformViewApi(id binaryMessenger, NSObject *_Nullable api); - -extern void SetUpFGMMapsPlatformViewApiWithSuffix(id binaryMessenger, NSObject *_Nullable api, NSString *messageChannelSuffix); +extern void SetUpFGMMapsPlatformViewApi(id binaryMessenger, + NSObject *_Nullable api); +extern void SetUpFGMMapsPlatformViewApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); /// Inspector API only intended for use in integration tests. @protocol FGMMapsInspectorApi @@ -789,31 +832,43 @@ extern void SetUpFGMMapsPlatformViewApiWithSuffix(id bin - (nullable NSNumber *)isMyLocationButtonEnabledWithError:(FlutterError *_Nullable *_Nonnull)error; /// @return `nil` only when `error != nil`. - (nullable NSNumber *)isTrafficEnabledWithError:(FlutterError *_Nullable *_Nonnull)error; -- (nullable FGMPlatformTileLayer *)tileOverlayWithIdentifier:(NSString *)tileOverlayId error:(FlutterError *_Nullable *_Nonnull)error; -- (nullable FGMPlatformHeatmap *)heatmapWithIdentifier:(NSString *)heatmapId error:(FlutterError *_Nullable *_Nonnull)error; +- (nullable FGMPlatformTileLayer *)tileOverlayWithIdentifier:(NSString *)tileOverlayId + error: + (FlutterError *_Nullable *_Nonnull)error; +- (nullable FGMPlatformHeatmap *)heatmapWithIdentifier:(NSString *)heatmapId + error:(FlutterError *_Nullable *_Nonnull)error; /// @return `nil` only when `error != nil`. - (nullable FGMPlatformZoomRange *)zoomRange:(FlutterError *_Nullable *_Nonnull)error; /// @return `nil` only when `error != nil`. -- (nullable NSArray *)clustersWithIdentifier:(NSString *)clusterManagerId error:(FlutterError *_Nullable *_Nonnull)error; +- (nullable NSArray *) + clustersWithIdentifier:(NSString *)clusterManagerId + error:(FlutterError *_Nullable *_Nonnull)error; @end -extern void SetUpFGMMapsInspectorApi(id binaryMessenger, NSObject *_Nullable api); - -extern void SetUpFGMMapsInspectorApiWithSuffix(id binaryMessenger, NSObject *_Nullable api, NSString *messageChannelSuffix); +extern void SetUpFGMMapsInspectorApi(id binaryMessenger, + NSObject *_Nullable api); +extern void SetUpFGMMapsInspectorApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); /// API for interacting with the image registry. @protocol FGMImageRegistryApi /// Adds a bitmap to the cache. -- (void)addBitmapToCacheId:(NSInteger)id bitmap:(FGMPlatformBitmap *)bitmap error:(FlutterError *_Nullable *_Nonnull)error; +- (void)addBitmapToCacheId:(NSInteger)id + bitmap:(FGMPlatformBitmap *)bitmap + error:(FlutterError *_Nullable *_Nonnull)error; /// Retrieves a bitmap from the cache. - (void)removeBitmapFromCacheId:(NSInteger)id error:(FlutterError *_Nullable *_Nonnull)error; /// Clears the bitmap cache. - (void)clearBitmapCacheWithError:(FlutterError *_Nullable *_Nonnull)error; @end -extern void SetUpFGMImageRegistryApi(id binaryMessenger, NSObject *_Nullable api); +extern void SetUpFGMImageRegistryApi(id binaryMessenger, + NSObject *_Nullable api); -extern void SetUpFGMImageRegistryApiWithSuffix(id binaryMessenger, NSObject *_Nullable api, NSString *messageChannelSuffix); +extern void SetUpFGMImageRegistryApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); NS_ASSUME_NONNULL_END diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.m index 1fcf8ddd5df..44d22096ad1 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.m @@ -26,7 +26,12 @@ } static FlutterError *createConnectionError(NSString *channelName) { - return [FlutterError errorWithCode:@"channel-error" message:[NSString stringWithFormat:@"%@/%@/%@", @"Unable to establish connection on channel: '", channelName, @"'."] details:@""]; + return [FlutterError + errorWithCode:@"channel-error" + message:[NSString stringWithFormat:@"%@/%@/%@", + @"Unable to establish connection on channel: '", + channelName, @"'."] + details:@""]; } static id GetNullableObjectAtIndex(NSArray *array, NSInteger key) { @@ -313,11 +318,11 @@ + (nullable FGMPlatformBitmapRegisteredMapBitmap *)nullableFromList:(NSArray @end @implementation FGMPlatformCameraPosition -+ (instancetype)makeWithBearing:(double )bearing - target:(FGMPlatformLatLng *)target - tilt:(double )tilt - zoom:(double )zoom { - FGMPlatformCameraPosition* pigeonResult = [[FGMPlatformCameraPosition alloc] init]; ++ (instancetype)makeWithBearing:(double)bearing + target:(FGMPlatformLatLng *)target + tilt:(double)tilt + zoom:(double)zoom { + FGMPlatformCameraPosition *pigeonResult = [[FGMPlatformCameraPosition alloc] init]; pigeonResult.bearing = bearing; pigeonResult.target = target; pigeonResult.tilt = tilt; @@ -346,8 +351,8 @@ + (nullable FGMPlatformCameraPosition *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformCameraUpdate -+ (instancetype)makeWithCameraUpdate:(id )cameraUpdate { - FGMPlatformCameraUpdate* pigeonResult = [[FGMPlatformCameraUpdate alloc] init]; ++ (instancetype)makeWithCameraUpdate:(id)cameraUpdate { + FGMPlatformCameraUpdate *pigeonResult = [[FGMPlatformCameraUpdate alloc] init]; pigeonResult.cameraUpdate = cameraUpdate; return pigeonResult; } @@ -368,12 +373,14 @@ + (nullable FGMPlatformCameraUpdate *)nullableFromList:(NSArray *)list { @implementation FGMPlatformCameraUpdateNewCameraPosition + (instancetype)makeWithCameraPosition:(FGMPlatformCameraPosition *)cameraPosition { - FGMPlatformCameraUpdateNewCameraPosition* pigeonResult = [[FGMPlatformCameraUpdateNewCameraPosition alloc] init]; + FGMPlatformCameraUpdateNewCameraPosition *pigeonResult = + [[FGMPlatformCameraUpdateNewCameraPosition alloc] init]; pigeonResult.cameraPosition = cameraPosition; return pigeonResult; } + (FGMPlatformCameraUpdateNewCameraPosition *)fromList:(NSArray *)list { - FGMPlatformCameraUpdateNewCameraPosition *pigeonResult = [[FGMPlatformCameraUpdateNewCameraPosition alloc] init]; + FGMPlatformCameraUpdateNewCameraPosition *pigeonResult = + [[FGMPlatformCameraUpdateNewCameraPosition alloc] init]; pigeonResult.cameraPosition = GetNullableObjectAtIndex(list, 0); return pigeonResult; } @@ -389,7 +396,7 @@ + (nullable FGMPlatformCameraUpdateNewCameraPosition *)nullableFromList:(NSArray @implementation FGMPlatformCameraUpdateNewLatLng + (instancetype)makeWithLatLng:(FGMPlatformLatLng *)latLng { - FGMPlatformCameraUpdateNewLatLng* pigeonResult = [[FGMPlatformCameraUpdateNewLatLng alloc] init]; + FGMPlatformCameraUpdateNewLatLng *pigeonResult = [[FGMPlatformCameraUpdateNewLatLng alloc] init]; pigeonResult.latLng = latLng; return pigeonResult; } @@ -409,15 +416,16 @@ + (nullable FGMPlatformCameraUpdateNewLatLng *)nullableFromList:(NSArray *)l @end @implementation FGMPlatformCameraUpdateNewLatLngBounds -+ (instancetype)makeWithBounds:(FGMPlatformLatLngBounds *)bounds - padding:(double )padding { - FGMPlatformCameraUpdateNewLatLngBounds* pigeonResult = [[FGMPlatformCameraUpdateNewLatLngBounds alloc] init]; ++ (instancetype)makeWithBounds:(FGMPlatformLatLngBounds *)bounds padding:(double)padding { + FGMPlatformCameraUpdateNewLatLngBounds *pigeonResult = + [[FGMPlatformCameraUpdateNewLatLngBounds alloc] init]; pigeonResult.bounds = bounds; pigeonResult.padding = padding; return pigeonResult; } + (FGMPlatformCameraUpdateNewLatLngBounds *)fromList:(NSArray *)list { - FGMPlatformCameraUpdateNewLatLngBounds *pigeonResult = [[FGMPlatformCameraUpdateNewLatLngBounds alloc] init]; + FGMPlatformCameraUpdateNewLatLngBounds *pigeonResult = + [[FGMPlatformCameraUpdateNewLatLngBounds alloc] init]; pigeonResult.bounds = GetNullableObjectAtIndex(list, 0); pigeonResult.padding = [GetNullableObjectAtIndex(list, 1) doubleValue]; return pigeonResult; @@ -434,15 +442,16 @@ + (nullable FGMPlatformCameraUpdateNewLatLngBounds *)nullableFromList:(NSArray *)list { - FGMPlatformCameraUpdateNewLatLngZoom *pigeonResult = [[FGMPlatformCameraUpdateNewLatLngZoom alloc] init]; + FGMPlatformCameraUpdateNewLatLngZoom *pigeonResult = + [[FGMPlatformCameraUpdateNewLatLngZoom alloc] init]; pigeonResult.latLng = GetNullableObjectAtIndex(list, 0); pigeonResult.zoom = [GetNullableObjectAtIndex(list, 1) doubleValue]; return pigeonResult; @@ -459,9 +468,8 @@ + (nullable FGMPlatformCameraUpdateNewLatLngZoom *)nullableFromList:(NSArray @end @implementation FGMPlatformCameraUpdateScrollBy -+ (instancetype)makeWithDx:(double )dx - dy:(double )dy { - FGMPlatformCameraUpdateScrollBy* pigeonResult = [[FGMPlatformCameraUpdateScrollBy alloc] init]; ++ (instancetype)makeWithDx:(double)dx dy:(double)dy { + FGMPlatformCameraUpdateScrollBy *pigeonResult = [[FGMPlatformCameraUpdateScrollBy alloc] init]; pigeonResult.dx = dx; pigeonResult.dy = dy; return pigeonResult; @@ -484,9 +492,8 @@ + (nullable FGMPlatformCameraUpdateScrollBy *)nullableFromList:(NSArray *)li @end @implementation FGMPlatformCameraUpdateZoomBy -+ (instancetype)makeWithAmount:(double )amount - focus:(nullable FGMPlatformPoint *)focus { - FGMPlatformCameraUpdateZoomBy* pigeonResult = [[FGMPlatformCameraUpdateZoomBy alloc] init]; ++ (instancetype)makeWithAmount:(double)amount focus:(nullable FGMPlatformPoint *)focus { + FGMPlatformCameraUpdateZoomBy *pigeonResult = [[FGMPlatformCameraUpdateZoomBy alloc] init]; pigeonResult.amount = amount; pigeonResult.focus = focus; return pigeonResult; @@ -509,8 +516,8 @@ + (nullable FGMPlatformCameraUpdateZoomBy *)nullableFromList:(NSArray *)list @end @implementation FGMPlatformCameraUpdateZoom -+ (instancetype)makeWithOut:(BOOL )out { - FGMPlatformCameraUpdateZoom* pigeonResult = [[FGMPlatformCameraUpdateZoom alloc] init]; ++ (instancetype)makeWithOut:(BOOL)out { + FGMPlatformCameraUpdateZoom *pigeonResult = [[FGMPlatformCameraUpdateZoom alloc] init]; pigeonResult.out = out; return pigeonResult; } @@ -530,8 +537,8 @@ + (nullable FGMPlatformCameraUpdateZoom *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformCameraUpdateZoomTo -+ (instancetype)makeWithZoom:(double )zoom { - FGMPlatformCameraUpdateZoomTo* pigeonResult = [[FGMPlatformCameraUpdateZoomTo alloc] init]; ++ (instancetype)makeWithZoom:(double)zoom { + FGMPlatformCameraUpdateZoomTo *pigeonResult = [[FGMPlatformCameraUpdateZoomTo alloc] init]; pigeonResult.zoom = zoom; return pigeonResult; } @@ -551,16 +558,16 @@ + (nullable FGMPlatformCameraUpdateZoomTo *)nullableFromList:(NSArray *)list @end @implementation FGMPlatformCircle -+ (instancetype)makeWithConsumeTapEvents:(BOOL )consumeTapEvents - fillColor:(NSInteger )fillColor - strokeColor:(NSInteger )strokeColor - visible:(BOOL )visible - strokeWidth:(NSInteger )strokeWidth - zIndex:(double )zIndex - center:(FGMPlatformLatLng *)center - radius:(double )radius - circleId:(NSString *)circleId { - FGMPlatformCircle* pigeonResult = [[FGMPlatformCircle alloc] init]; ++ (instancetype)makeWithConsumeTapEvents:(BOOL)consumeTapEvents + fillColor:(NSInteger)fillColor + strokeColor:(NSInteger)strokeColor + visible:(BOOL)visible + strokeWidth:(NSInteger)strokeWidth + zIndex:(double)zIndex + center:(FGMPlatformLatLng *)center + radius:(double)radius + circleId:(NSString *)circleId { + FGMPlatformCircle *pigeonResult = [[FGMPlatformCircle alloc] init]; pigeonResult.consumeTapEvents = consumeTapEvents; pigeonResult.fillColor = fillColor; pigeonResult.strokeColor = strokeColor; @@ -604,8 +611,8 @@ + (nullable FGMPlatformCircle *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformHeatmap -+ (instancetype)makeWithJson:(id )json { - FGMPlatformHeatmap* pigeonResult = [[FGMPlatformHeatmap alloc] init]; ++ (instancetype)makeWithJson:(id)json { + FGMPlatformHeatmap *pigeonResult = [[FGMPlatformHeatmap alloc] init]; pigeonResult.json = json; return pigeonResult; } @@ -626,9 +633,9 @@ + (nullable FGMPlatformHeatmap *)nullableFromList:(NSArray *)list { @implementation FGMPlatformInfoWindow + (instancetype)makeWithTitle:(nullable NSString *)title - snippet:(nullable NSString *)snippet - anchor:(FGMPlatformPoint *)anchor { - FGMPlatformInfoWindow* pigeonResult = [[FGMPlatformInfoWindow alloc] init]; + snippet:(nullable NSString *)snippet + anchor:(FGMPlatformPoint *)anchor { + FGMPlatformInfoWindow *pigeonResult = [[FGMPlatformInfoWindow alloc] init]; pigeonResult.title = title; pigeonResult.snippet = snippet; pigeonResult.anchor = anchor; @@ -655,10 +662,10 @@ + (nullable FGMPlatformInfoWindow *)nullableFromList:(NSArray *)list { @implementation FGMPlatformCluster + (instancetype)makeWithClusterManagerId:(NSString *)clusterManagerId - position:(FGMPlatformLatLng *)position - bounds:(FGMPlatformLatLngBounds *)bounds - markerIds:(NSArray *)markerIds { - FGMPlatformCluster* pigeonResult = [[FGMPlatformCluster alloc] init]; + position:(FGMPlatformLatLng *)position + bounds:(FGMPlatformLatLngBounds *)bounds + markerIds:(NSArray *)markerIds { + FGMPlatformCluster *pigeonResult = [[FGMPlatformCluster alloc] init]; pigeonResult.clusterManagerId = clusterManagerId; pigeonResult.position = position; pigeonResult.bounds = bounds; @@ -688,7 +695,7 @@ + (nullable FGMPlatformCluster *)nullableFromList:(NSArray *)list { @implementation FGMPlatformClusterManager + (instancetype)makeWithIdentifier:(NSString *)identifier { - FGMPlatformClusterManager* pigeonResult = [[FGMPlatformClusterManager alloc] init]; + FGMPlatformClusterManager *pigeonResult = [[FGMPlatformClusterManager alloc] init]; pigeonResult.identifier = identifier; return pigeonResult; } @@ -708,20 +715,20 @@ + (nullable FGMPlatformClusterManager *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformMarker -+ (instancetype)makeWithAlpha:(double )alpha - anchor:(FGMPlatformPoint *)anchor - consumeTapEvents:(BOOL )consumeTapEvents - draggable:(BOOL )draggable - flat:(BOOL )flat - icon:(FGMPlatformBitmap *)icon - infoWindow:(FGMPlatformInfoWindow *)infoWindow - position:(FGMPlatformLatLng *)position - rotation:(double )rotation - visible:(BOOL )visible - zIndex:(double )zIndex - markerId:(NSString *)markerId - clusterManagerId:(nullable NSString *)clusterManagerId { - FGMPlatformMarker* pigeonResult = [[FGMPlatformMarker alloc] init]; ++ (instancetype)makeWithAlpha:(double)alpha + anchor:(FGMPlatformPoint *)anchor + consumeTapEvents:(BOOL)consumeTapEvents + draggable:(BOOL)draggable + flat:(BOOL)flat + icon:(FGMPlatformBitmap *)icon + infoWindow:(FGMPlatformInfoWindow *)infoWindow + position:(FGMPlatformLatLng *)position + rotation:(double)rotation + visible:(BOOL)visible + zIndex:(double)zIndex + markerId:(NSString *)markerId + clusterManagerId:(nullable NSString *)clusterManagerId { + FGMPlatformMarker *pigeonResult = [[FGMPlatformMarker alloc] init]; pigeonResult.alpha = alpha; pigeonResult.anchor = anchor; pigeonResult.consumeTapEvents = consumeTapEvents; @@ -778,16 +785,16 @@ + (nullable FGMPlatformMarker *)nullableFromList:(NSArray *)list { @implementation FGMPlatformPolygon + (instancetype)makeWithPolygonId:(NSString *)polygonId - consumesTapEvents:(BOOL )consumesTapEvents - fillColor:(NSInteger )fillColor - geodesic:(BOOL )geodesic - points:(NSArray *)points - holes:(NSArray *> *)holes - visible:(BOOL )visible - strokeColor:(NSInteger )strokeColor - strokeWidth:(NSInteger )strokeWidth - zIndex:(NSInteger )zIndex { - FGMPlatformPolygon* pigeonResult = [[FGMPlatformPolygon alloc] init]; + consumesTapEvents:(BOOL)consumesTapEvents + fillColor:(NSInteger)fillColor + geodesic:(BOOL)geodesic + points:(NSArray *)points + holes:(NSArray *> *)holes + visible:(BOOL)visible + strokeColor:(NSInteger)strokeColor + strokeWidth:(NSInteger)strokeWidth + zIndex:(NSInteger)zIndex { + FGMPlatformPolygon *pigeonResult = [[FGMPlatformPolygon alloc] init]; pigeonResult.polygonId = polygonId; pigeonResult.consumesTapEvents = consumesTapEvents; pigeonResult.fillColor = fillColor; @@ -835,16 +842,16 @@ + (nullable FGMPlatformPolygon *)nullableFromList:(NSArray *)list { @implementation FGMPlatformPolyline + (instancetype)makeWithPolylineId:(NSString *)polylineId - consumesTapEvents:(BOOL )consumesTapEvents - color:(NSInteger )color - geodesic:(BOOL )geodesic - jointType:(FGMPlatformJointType)jointType - patterns:(NSArray *)patterns - points:(NSArray *)points - visible:(BOOL )visible - width:(NSInteger )width - zIndex:(NSInteger )zIndex { - FGMPlatformPolyline* pigeonResult = [[FGMPlatformPolyline alloc] init]; + consumesTapEvents:(BOOL)consumesTapEvents + color:(NSInteger)color + geodesic:(BOOL)geodesic + jointType:(FGMPlatformJointType)jointType + patterns:(NSArray *)patterns + points:(NSArray *)points + visible:(BOOL)visible + width:(NSInteger)width + zIndex:(NSInteger)zIndex { + FGMPlatformPolyline *pigeonResult = [[FGMPlatformPolyline alloc] init]; pigeonResult.polylineId = polylineId; pigeonResult.consumesTapEvents = consumesTapEvents; pigeonResult.color = color; @@ -892,16 +899,16 @@ + (nullable FGMPlatformPolyline *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformPatternItem -+ (instancetype)makeWithType:(FGMPlatformPatternItemType)type - length:(nullable NSNumber *)length { - FGMPlatformPatternItem* pigeonResult = [[FGMPlatformPatternItem alloc] init]; ++ (instancetype)makeWithType:(FGMPlatformPatternItemType)type length:(nullable NSNumber *)length { + FGMPlatformPatternItem *pigeonResult = [[FGMPlatformPatternItem alloc] init]; pigeonResult.type = type; pigeonResult.length = length; return pigeonResult; } + (FGMPlatformPatternItem *)fromList:(NSArray *)list { FGMPlatformPatternItem *pigeonResult = [[FGMPlatformPatternItem alloc] init]; - FGMPlatformPatternItemTypeBox *boxedFGMPlatformPatternItemType = GetNullableObjectAtIndex(list, 0); + FGMPlatformPatternItemTypeBox *boxedFGMPlatformPatternItemType = + GetNullableObjectAtIndex(list, 0); pigeonResult.type = boxedFGMPlatformPatternItemType.value; pigeonResult.length = GetNullableObjectAtIndex(list, 1); return pigeonResult; @@ -918,10 +925,10 @@ + (nullable FGMPlatformPatternItem *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformTile -+ (instancetype)makeWithWidth:(NSInteger )width - height:(NSInteger )height - data:(nullable FlutterStandardTypedData *)data { - FGMPlatformTile* pigeonResult = [[FGMPlatformTile alloc] init]; ++ (instancetype)makeWithWidth:(NSInteger)width + height:(NSInteger)height + data:(nullable FlutterStandardTypedData *)data { + FGMPlatformTile *pigeonResult = [[FGMPlatformTile alloc] init]; pigeonResult.width = width; pigeonResult.height = height; pigeonResult.data = data; @@ -948,12 +955,12 @@ + (nullable FGMPlatformTile *)nullableFromList:(NSArray *)list { @implementation FGMPlatformTileOverlay + (instancetype)makeWithTileOverlayId:(NSString *)tileOverlayId - fadeIn:(BOOL )fadeIn - transparency:(double )transparency - zIndex:(NSInteger )zIndex - visible:(BOOL )visible - tileSize:(NSInteger )tileSize { - FGMPlatformTileOverlay* pigeonResult = [[FGMPlatformTileOverlay alloc] init]; + fadeIn:(BOOL)fadeIn + transparency:(double)transparency + zIndex:(NSInteger)zIndex + visible:(BOOL)visible + tileSize:(NSInteger)tileSize { + FGMPlatformTileOverlay *pigeonResult = [[FGMPlatformTileOverlay alloc] init]; pigeonResult.tileOverlayId = tileOverlayId; pigeonResult.fadeIn = fadeIn; pigeonResult.transparency = transparency; @@ -988,11 +995,11 @@ + (nullable FGMPlatformTileOverlay *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformEdgeInsets -+ (instancetype)makeWithTop:(double )top - bottom:(double )bottom - left:(double )left - right:(double )right { - FGMPlatformEdgeInsets* pigeonResult = [[FGMPlatformEdgeInsets alloc] init]; ++ (instancetype)makeWithTop:(double)top + bottom:(double)bottom + left:(double)left + right:(double)right { + FGMPlatformEdgeInsets *pigeonResult = [[FGMPlatformEdgeInsets alloc] init]; pigeonResult.top = top; pigeonResult.bottom = bottom; pigeonResult.left = left; @@ -1021,9 +1028,8 @@ + (nullable FGMPlatformEdgeInsets *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformLatLng -+ (instancetype)makeWithLatitude:(double )latitude - longitude:(double )longitude { - FGMPlatformLatLng* pigeonResult = [[FGMPlatformLatLng alloc] init]; ++ (instancetype)makeWithLatitude:(double)latitude longitude:(double)longitude { + FGMPlatformLatLng *pigeonResult = [[FGMPlatformLatLng alloc] init]; pigeonResult.latitude = latitude; pigeonResult.longitude = longitude; return pigeonResult; @@ -1047,8 +1053,8 @@ + (nullable FGMPlatformLatLng *)nullableFromList:(NSArray *)list { @implementation FGMPlatformLatLngBounds + (instancetype)makeWithNortheast:(FGMPlatformLatLng *)northeast - southwest:(FGMPlatformLatLng *)southwest { - FGMPlatformLatLngBounds* pigeonResult = [[FGMPlatformLatLngBounds alloc] init]; + southwest:(FGMPlatformLatLng *)southwest { + FGMPlatformLatLngBounds *pigeonResult = [[FGMPlatformLatLngBounds alloc] init]; pigeonResult.northeast = northeast; pigeonResult.southwest = southwest; return pigeonResult; @@ -1072,7 +1078,7 @@ + (nullable FGMPlatformLatLngBounds *)nullableFromList:(NSArray *)list { @implementation FGMPlatformCameraTargetBounds + (instancetype)makeWithBounds:(nullable FGMPlatformLatLngBounds *)bounds { - FGMPlatformCameraTargetBounds* pigeonResult = [[FGMPlatformCameraTargetBounds alloc] init]; + FGMPlatformCameraTargetBounds *pigeonResult = [[FGMPlatformCameraTargetBounds alloc] init]; pigeonResult.bounds = bounds; return pigeonResult; } @@ -1092,16 +1098,17 @@ + (nullable FGMPlatformCameraTargetBounds *)nullableFromList:(NSArray *)list @end @implementation FGMPlatformMapViewCreationParams -+ (instancetype)makeWithInitialCameraPosition:(FGMPlatformCameraPosition *)initialCameraPosition - mapConfiguration:(FGMPlatformMapConfiguration *)mapConfiguration - initialCircles:(NSArray *)initialCircles - initialMarkers:(NSArray *)initialMarkers - initialPolygons:(NSArray *)initialPolygons - initialPolylines:(NSArray *)initialPolylines - initialHeatmaps:(NSArray *)initialHeatmaps - initialTileOverlays:(NSArray *)initialTileOverlays - initialClusterManagers:(NSArray *)initialClusterManagers { - FGMPlatformMapViewCreationParams* pigeonResult = [[FGMPlatformMapViewCreationParams alloc] init]; ++ (instancetype) + makeWithInitialCameraPosition:(FGMPlatformCameraPosition *)initialCameraPosition + mapConfiguration:(FGMPlatformMapConfiguration *)mapConfiguration + initialCircles:(NSArray *)initialCircles + initialMarkers:(NSArray *)initialMarkers + initialPolygons:(NSArray *)initialPolygons + initialPolylines:(NSArray *)initialPolylines + initialHeatmaps:(NSArray *)initialHeatmaps + initialTileOverlays:(NSArray *)initialTileOverlays + initialClusterManagers:(NSArray *)initialClusterManagers { + FGMPlatformMapViewCreationParams *pigeonResult = [[FGMPlatformMapViewCreationParams alloc] init]; pigeonResult.initialCameraPosition = initialCameraPosition; pigeonResult.mapConfiguration = mapConfiguration; pigeonResult.initialCircles = initialCircles; @@ -1146,23 +1153,23 @@ + (nullable FGMPlatformMapViewCreationParams *)nullableFromList:(NSArray *)l @implementation FGMPlatformMapConfiguration + (instancetype)makeWithCompassEnabled:(nullable NSNumber *)compassEnabled - cameraTargetBounds:(nullable FGMPlatformCameraTargetBounds *)cameraTargetBounds - mapType:(nullable FGMPlatformMapTypeBox *)mapType - minMaxZoomPreference:(nullable FGMPlatformZoomRange *)minMaxZoomPreference - rotateGesturesEnabled:(nullable NSNumber *)rotateGesturesEnabled - scrollGesturesEnabled:(nullable NSNumber *)scrollGesturesEnabled - tiltGesturesEnabled:(nullable NSNumber *)tiltGesturesEnabled - trackCameraPosition:(nullable NSNumber *)trackCameraPosition - zoomGesturesEnabled:(nullable NSNumber *)zoomGesturesEnabled - myLocationEnabled:(nullable NSNumber *)myLocationEnabled - myLocationButtonEnabled:(nullable NSNumber *)myLocationButtonEnabled - padding:(nullable FGMPlatformEdgeInsets *)padding - indoorViewEnabled:(nullable NSNumber *)indoorViewEnabled - trafficEnabled:(nullable NSNumber *)trafficEnabled - buildingsEnabled:(nullable NSNumber *)buildingsEnabled - cloudMapId:(nullable NSString *)cloudMapId - style:(nullable NSString *)style { - FGMPlatformMapConfiguration* pigeonResult = [[FGMPlatformMapConfiguration alloc] init]; + cameraTargetBounds:(nullable FGMPlatformCameraTargetBounds *)cameraTargetBounds + mapType:(nullable FGMPlatformMapTypeBox *)mapType + minMaxZoomPreference:(nullable FGMPlatformZoomRange *)minMaxZoomPreference + rotateGesturesEnabled:(nullable NSNumber *)rotateGesturesEnabled + scrollGesturesEnabled:(nullable NSNumber *)scrollGesturesEnabled + tiltGesturesEnabled:(nullable NSNumber *)tiltGesturesEnabled + trackCameraPosition:(nullable NSNumber *)trackCameraPosition + zoomGesturesEnabled:(nullable NSNumber *)zoomGesturesEnabled + myLocationEnabled:(nullable NSNumber *)myLocationEnabled + myLocationButtonEnabled:(nullable NSNumber *)myLocationButtonEnabled + padding:(nullable FGMPlatformEdgeInsets *)padding + indoorViewEnabled:(nullable NSNumber *)indoorViewEnabled + trafficEnabled:(nullable NSNumber *)trafficEnabled + buildingsEnabled:(nullable NSNumber *)buildingsEnabled + cloudMapId:(nullable NSString *)cloudMapId + style:(nullable NSString *)style { + FGMPlatformMapConfiguration *pigeonResult = [[FGMPlatformMapConfiguration alloc] init]; pigeonResult.compassEnabled = compassEnabled; pigeonResult.cameraTargetBounds = cameraTargetBounds; pigeonResult.mapType = mapType; @@ -1230,9 +1237,8 @@ + (nullable FGMPlatformMapConfiguration *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformPoint -+ (instancetype)makeWithX:(double )x - y:(double )y { - FGMPlatformPoint* pigeonResult = [[FGMPlatformPoint alloc] init]; ++ (instancetype)makeWithX:(double)x y:(double)y { + FGMPlatformPoint *pigeonResult = [[FGMPlatformPoint alloc] init]; pigeonResult.x = x; pigeonResult.y = y; return pigeonResult; @@ -1255,9 +1261,8 @@ + (nullable FGMPlatformPoint *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformSize -+ (instancetype)makeWithWidth:(double )width - height:(double )height { - FGMPlatformSize* pigeonResult = [[FGMPlatformSize alloc] init]; ++ (instancetype)makeWithWidth:(double)width height:(double)height { + FGMPlatformSize *pigeonResult = [[FGMPlatformSize alloc] init]; pigeonResult.width = width; pigeonResult.height = height; return pigeonResult; @@ -1280,11 +1285,11 @@ + (nullable FGMPlatformSize *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformTileLayer -+ (instancetype)makeWithVisible:(BOOL )visible - fadeIn:(BOOL )fadeIn - opacity:(double )opacity - zIndex:(NSInteger )zIndex { - FGMPlatformTileLayer* pigeonResult = [[FGMPlatformTileLayer alloc] init]; ++ (instancetype)makeWithVisible:(BOOL)visible + fadeIn:(BOOL)fadeIn + opacity:(double)opacity + zIndex:(NSInteger)zIndex { + FGMPlatformTileLayer *pigeonResult = [[FGMPlatformTileLayer alloc] init]; pigeonResult.visible = visible; pigeonResult.fadeIn = fadeIn; pigeonResult.opacity = opacity; @@ -1313,9 +1318,8 @@ + (nullable FGMPlatformTileLayer *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformZoomRange -+ (instancetype)makeWithMin:(nullable NSNumber *)min - max:(nullable NSNumber *)max { - FGMPlatformZoomRange* pigeonResult = [[FGMPlatformZoomRange alloc] init]; ++ (instancetype)makeWithMin:(nullable NSNumber *)min max:(nullable NSNumber *)max { + FGMPlatformZoomRange *pigeonResult = [[FGMPlatformZoomRange alloc] init]; pigeonResult.min = min; pigeonResult.max = max; return pigeonResult; @@ -1338,8 +1342,8 @@ + (nullable FGMPlatformZoomRange *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformBitmap -+ (instancetype)makeWithBitmap:(id )bitmap { - FGMPlatformBitmap* pigeonResult = [[FGMPlatformBitmap alloc] init]; ++ (instancetype)makeWithBitmap:(id)bitmap { + FGMPlatformBitmap *pigeonResult = [[FGMPlatformBitmap alloc] init]; pigeonResult.bitmap = bitmap; return pigeonResult; } @@ -1360,7 +1364,7 @@ + (nullable FGMPlatformBitmap *)nullableFromList:(NSArray *)list { @implementation FGMPlatformBitmapDefaultMarker + (instancetype)makeWithHue:(nullable NSNumber *)hue { - FGMPlatformBitmapDefaultMarker* pigeonResult = [[FGMPlatformBitmapDefaultMarker alloc] init]; + FGMPlatformBitmapDefaultMarker *pigeonResult = [[FGMPlatformBitmapDefaultMarker alloc] init]; pigeonResult.hue = hue; return pigeonResult; } @@ -1381,8 +1385,8 @@ + (nullable FGMPlatformBitmapDefaultMarker *)nullableFromList:(NSArray *)lis @implementation FGMPlatformBitmapBytes + (instancetype)makeWithByteData:(FlutterStandardTypedData *)byteData - size:(nullable FGMPlatformSize *)size { - FGMPlatformBitmapBytes* pigeonResult = [[FGMPlatformBitmapBytes alloc] init]; + size:(nullable FGMPlatformSize *)size { + FGMPlatformBitmapBytes *pigeonResult = [[FGMPlatformBitmapBytes alloc] init]; pigeonResult.byteData = byteData; pigeonResult.size = size; return pigeonResult; @@ -1405,9 +1409,8 @@ + (nullable FGMPlatformBitmapBytes *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformBitmapAsset -+ (instancetype)makeWithName:(NSString *)name - pkg:(nullable NSString *)pkg { - FGMPlatformBitmapAsset* pigeonResult = [[FGMPlatformBitmapAsset alloc] init]; ++ (instancetype)makeWithName:(NSString *)name pkg:(nullable NSString *)pkg { + FGMPlatformBitmapAsset *pigeonResult = [[FGMPlatformBitmapAsset alloc] init]; pigeonResult.name = name; pigeonResult.pkg = pkg; return pigeonResult; @@ -1431,9 +1434,9 @@ + (nullable FGMPlatformBitmapAsset *)nullableFromList:(NSArray *)list { @implementation FGMPlatformBitmapAssetImage + (instancetype)makeWithName:(NSString *)name - scale:(double )scale - size:(nullable FGMPlatformSize *)size { - FGMPlatformBitmapAssetImage* pigeonResult = [[FGMPlatformBitmapAssetImage alloc] init]; + scale:(double)scale + size:(nullable FGMPlatformSize *)size { + FGMPlatformBitmapAssetImage *pigeonResult = [[FGMPlatformBitmapAssetImage alloc] init]; pigeonResult.name = name; pigeonResult.scale = scale; pigeonResult.size = size; @@ -1460,11 +1463,11 @@ + (nullable FGMPlatformBitmapAssetImage *)nullableFromList:(NSArray *)list { @implementation FGMPlatformBitmapAssetMap + (instancetype)makeWithAssetName:(NSString *)assetName - bitmapScaling:(FGMPlatformMapBitmapScaling)bitmapScaling - imagePixelRatio:(double )imagePixelRatio - width:(nullable NSNumber *)width - height:(nullable NSNumber *)height { - FGMPlatformBitmapAssetMap* pigeonResult = [[FGMPlatformBitmapAssetMap alloc] init]; + bitmapScaling:(FGMPlatformMapBitmapScaling)bitmapScaling + imagePixelRatio:(double)imagePixelRatio + width:(nullable NSNumber *)width + height:(nullable NSNumber *)height { + FGMPlatformBitmapAssetMap *pigeonResult = [[FGMPlatformBitmapAssetMap alloc] init]; pigeonResult.assetName = assetName; pigeonResult.bitmapScaling = bitmapScaling; pigeonResult.imagePixelRatio = imagePixelRatio; @@ -1475,7 +1478,8 @@ + (instancetype)makeWithAssetName:(NSString *)assetName + (FGMPlatformBitmapAssetMap *)fromList:(NSArray *)list { FGMPlatformBitmapAssetMap *pigeonResult = [[FGMPlatformBitmapAssetMap alloc] init]; pigeonResult.assetName = GetNullableObjectAtIndex(list, 0); - FGMPlatformMapBitmapScalingBox *boxedFGMPlatformMapBitmapScaling = GetNullableObjectAtIndex(list, 1); + FGMPlatformMapBitmapScalingBox *boxedFGMPlatformMapBitmapScaling = + GetNullableObjectAtIndex(list, 1); pigeonResult.bitmapScaling = boxedFGMPlatformMapBitmapScaling.value; pigeonResult.imagePixelRatio = [GetNullableObjectAtIndex(list, 2) doubleValue]; pigeonResult.width = GetNullableObjectAtIndex(list, 3); @@ -1498,11 +1502,11 @@ + (nullable FGMPlatformBitmapAssetMap *)nullableFromList:(NSArray *)list { @implementation FGMPlatformBitmapBytesMap + (instancetype)makeWithByteData:(FlutterStandardTypedData *)byteData - bitmapScaling:(FGMPlatformMapBitmapScaling)bitmapScaling - imagePixelRatio:(double )imagePixelRatio - width:(nullable NSNumber *)width - height:(nullable NSNumber *)height { - FGMPlatformBitmapBytesMap* pigeonResult = [[FGMPlatformBitmapBytesMap alloc] init]; + bitmapScaling:(FGMPlatformMapBitmapScaling)bitmapScaling + imagePixelRatio:(double)imagePixelRatio + width:(nullable NSNumber *)width + height:(nullable NSNumber *)height { + FGMPlatformBitmapBytesMap *pigeonResult = [[FGMPlatformBitmapBytesMap alloc] init]; pigeonResult.byteData = byteData; pigeonResult.bitmapScaling = bitmapScaling; pigeonResult.imagePixelRatio = imagePixelRatio; @@ -1513,7 +1517,8 @@ + (instancetype)makeWithByteData:(FlutterStandardTypedData *)byteData + (FGMPlatformBitmapBytesMap *)fromList:(NSArray *)list { FGMPlatformBitmapBytesMap *pigeonResult = [[FGMPlatformBitmapBytesMap alloc] init]; pigeonResult.byteData = GetNullableObjectAtIndex(list, 0); - FGMPlatformMapBitmapScalingBox *boxedFGMPlatformMapBitmapScaling = GetNullableObjectAtIndex(list, 1); + FGMPlatformMapBitmapScalingBox *boxedFGMPlatformMapBitmapScaling = + GetNullableObjectAtIndex(list, 1); pigeonResult.bitmapScaling = boxedFGMPlatformMapBitmapScaling.value; pigeonResult.imagePixelRatio = [GetNullableObjectAtIndex(list, 2) doubleValue]; pigeonResult.width = GetNullableObjectAtIndex(list, 3); @@ -1535,13 +1540,15 @@ + (nullable FGMPlatformBitmapBytesMap *)nullableFromList:(NSArray *)list { @end @implementation FGMPlatformBitmapRegisteredMapBitmap -+ (instancetype)makeWithId:(NSInteger )id { - FGMPlatformBitmapRegisteredMapBitmap* pigeonResult = [[FGMPlatformBitmapRegisteredMapBitmap alloc] init]; ++ (instancetype)makeWithId:(NSInteger)id { + FGMPlatformBitmapRegisteredMapBitmap *pigeonResult = + [[FGMPlatformBitmapRegisteredMapBitmap alloc] init]; pigeonResult.id = id; return pigeonResult; } + (FGMPlatformBitmapRegisteredMapBitmap *)fromList:(NSArray *)list { - FGMPlatformBitmapRegisteredMapBitmap *pigeonResult = [[FGMPlatformBitmapRegisteredMapBitmap alloc] init]; + FGMPlatformBitmapRegisteredMapBitmap *pigeonResult = + [[FGMPlatformBitmapRegisteredMapBitmap alloc] init]; pigeonResult.id = [GetNullableObjectAtIndex(list, 0) integerValue]; return pigeonResult; } @@ -1562,97 +1569,105 @@ - (nullable id)readValueOfType:(UInt8)type { switch (type) { case 129: { NSNumber *enumAsNumber = [self readValue]; - return enumAsNumber == nil ? nil : [[FGMPlatformMapTypeBox alloc] initWithValue:[enumAsNumber integerValue]]; + return enumAsNumber == nil + ? nil + : [[FGMPlatformMapTypeBox alloc] initWithValue:[enumAsNumber integerValue]]; } case 130: { NSNumber *enumAsNumber = [self readValue]; - return enumAsNumber == nil ? nil : [[FGMPlatformJointTypeBox alloc] initWithValue:[enumAsNumber integerValue]]; + return enumAsNumber == nil + ? nil + : [[FGMPlatformJointTypeBox alloc] initWithValue:[enumAsNumber integerValue]]; } case 131: { NSNumber *enumAsNumber = [self readValue]; - return enumAsNumber == nil ? nil : [[FGMPlatformPatternItemTypeBox alloc] initWithValue:[enumAsNumber integerValue]]; + return enumAsNumber == nil ? nil + : [[FGMPlatformPatternItemTypeBox alloc] + initWithValue:[enumAsNumber integerValue]]; } case 132: { NSNumber *enumAsNumber = [self readValue]; - return enumAsNumber == nil ? nil : [[FGMPlatformMapBitmapScalingBox alloc] initWithValue:[enumAsNumber integerValue]]; + return enumAsNumber == nil ? nil + : [[FGMPlatformMapBitmapScalingBox alloc] + initWithValue:[enumAsNumber integerValue]]; } - case 133: + case 133: return [FGMPlatformCameraPosition fromList:[self readValue]]; - case 134: + case 134: return [FGMPlatformCameraUpdate fromList:[self readValue]]; - case 135: + case 135: return [FGMPlatformCameraUpdateNewCameraPosition fromList:[self readValue]]; - case 136: + case 136: return [FGMPlatformCameraUpdateNewLatLng fromList:[self readValue]]; - case 137: + case 137: return [FGMPlatformCameraUpdateNewLatLngBounds fromList:[self readValue]]; - case 138: + case 138: return [FGMPlatformCameraUpdateNewLatLngZoom fromList:[self readValue]]; - case 139: + case 139: return [FGMPlatformCameraUpdateScrollBy fromList:[self readValue]]; - case 140: + case 140: return [FGMPlatformCameraUpdateZoomBy fromList:[self readValue]]; - case 141: + case 141: return [FGMPlatformCameraUpdateZoom fromList:[self readValue]]; - case 142: + case 142: return [FGMPlatformCameraUpdateZoomTo fromList:[self readValue]]; - case 143: + case 143: return [FGMPlatformCircle fromList:[self readValue]]; - case 144: + case 144: return [FGMPlatformHeatmap fromList:[self readValue]]; - case 145: + case 145: return [FGMPlatformInfoWindow fromList:[self readValue]]; - case 146: + case 146: return [FGMPlatformCluster fromList:[self readValue]]; - case 147: + case 147: return [FGMPlatformClusterManager fromList:[self readValue]]; - case 148: + case 148: return [FGMPlatformMarker fromList:[self readValue]]; - case 149: + case 149: return [FGMPlatformPolygon fromList:[self readValue]]; - case 150: + case 150: return [FGMPlatformPolyline fromList:[self readValue]]; - case 151: + case 151: return [FGMPlatformPatternItem fromList:[self readValue]]; - case 152: + case 152: return [FGMPlatformTile fromList:[self readValue]]; - case 153: + case 153: return [FGMPlatformTileOverlay fromList:[self readValue]]; - case 154: + case 154: return [FGMPlatformEdgeInsets fromList:[self readValue]]; - case 155: + case 155: return [FGMPlatformLatLng fromList:[self readValue]]; - case 156: + case 156: return [FGMPlatformLatLngBounds fromList:[self readValue]]; - case 157: + case 157: return [FGMPlatformCameraTargetBounds fromList:[self readValue]]; - case 158: + case 158: return [FGMPlatformMapViewCreationParams fromList:[self readValue]]; - case 159: + case 159: return [FGMPlatformMapConfiguration fromList:[self readValue]]; - case 160: + case 160: return [FGMPlatformPoint fromList:[self readValue]]; - case 161: + case 161: return [FGMPlatformSize fromList:[self readValue]]; - case 162: + case 162: return [FGMPlatformTileLayer fromList:[self readValue]]; - case 163: + case 163: return [FGMPlatformZoomRange fromList:[self readValue]]; - case 164: + case 164: return [FGMPlatformBitmap fromList:[self readValue]]; - case 165: + case 165: return [FGMPlatformBitmapDefaultMarker fromList:[self readValue]]; - case 166: + case 166: return [FGMPlatformBitmapBytes fromList:[self readValue]]; - case 167: + case 167: return [FGMPlatformBitmapAsset fromList:[self readValue]]; - case 168: + case 168: return [FGMPlatformBitmapAssetImage fromList:[self readValue]]; - case 169: + case 169: return [FGMPlatformBitmapAssetMap fromList:[self readValue]]; - case 170: + case 170: return [FGMPlatformBitmapBytesMap fromList:[self readValue]]; - case 171: + case 171: return [FGMPlatformBitmapRegisteredMapBitmap fromList:[self readValue]]; default: return [super readValueOfType:type]; @@ -1818,7 +1833,8 @@ - (FlutterStandardReader *)readerWithData:(NSData *)data { static FlutterStandardMessageCodec *sSharedObject = nil; static dispatch_once_t sPred = 0; dispatch_once(&sPred, ^{ - FGMMessagesPigeonCodecReaderWriter *readerWriter = [[FGMMessagesPigeonCodecReaderWriter alloc] init]; + FGMMessagesPigeonCodecReaderWriter *readerWriter = + [[FGMMessagesPigeonCodecReaderWriter alloc] init]; sSharedObject = [FlutterStandardMessageCodec codecWithReaderWriter:readerWriter]; }); return sSharedObject; @@ -1827,17 +1843,24 @@ void SetUpFGMMapsApi(id binaryMessenger, NSObject binaryMessenger, NSObject *api, NSString *messageChannelSuffix) { - messageChannelSuffix = messageChannelSuffix.length > 0 ? [NSString stringWithFormat: @".%@", messageChannelSuffix] : @""; +void SetUpFGMMapsApiWithSuffix(id binaryMessenger, + NSObject *api, NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; /// Returns once the map instance is available. { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.waitForMap", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat: + @"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.waitForMap", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(waitForMapWithError:)], @"FGMMapsApi api (%@) doesn't respond to @selector(waitForMapWithError:)", api); + NSCAssert([api respondsToSelector:@selector(waitForMapWithError:)], + @"FGMMapsApi api (%@) doesn't respond to @selector(waitForMapWithError:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; [api waitForMapWithError:&error]; @@ -1852,13 +1875,18 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, NSObj /// Only non-null configuration values will result in updates; options with /// null values will remain unchanged. { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateMapConfiguration", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsApi.updateMapConfiguration", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(updateWithMapConfiguration:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(updateWithMapConfiguration:error:)", api); + NSCAssert( + [api respondsToSelector:@selector(updateWithMapConfiguration:error:)], + @"FGMMapsApi api (%@) doesn't respond to @selector(updateWithMapConfiguration:error:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; FGMPlatformMapConfiguration *arg_configuration = GetNullableObjectAtIndex(args, 0); @@ -1872,20 +1900,29 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, NSObj } /// Updates the set of circles on the map. { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateCircles", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat: + @"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateCircles", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(updateCirclesByAdding:changing:removing:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(updateCirclesByAdding:changing:removing:error:)", api); + NSCAssert([api respondsToSelector:@selector(updateCirclesByAdding:changing:removing:error:)], + @"FGMMapsApi api (%@) doesn't respond to " + @"@selector(updateCirclesByAdding:changing:removing:error:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSArray *arg_toAdd = GetNullableObjectAtIndex(args, 0); NSArray *arg_toChange = GetNullableObjectAtIndex(args, 1); NSArray *arg_idsToRemove = GetNullableObjectAtIndex(args, 2); FlutterError *error; - [api updateCirclesByAdding:arg_toAdd changing:arg_toChange removing:arg_idsToRemove error:&error]; + [api updateCirclesByAdding:arg_toAdd + changing:arg_toChange + removing:arg_idsToRemove + error:&error]; callback(wrapResult(nil, error)); }]; } else { @@ -1894,20 +1931,28 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, NSObj } /// Updates the set of heatmaps on the map. { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateHeatmaps", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsApi.updateHeatmaps", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(updateHeatmapsByAdding:changing:removing:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(updateHeatmapsByAdding:changing:removing:error:)", api); + NSCAssert([api respondsToSelector:@selector(updateHeatmapsByAdding:changing:removing:error:)], + @"FGMMapsApi api (%@) doesn't respond to " + @"@selector(updateHeatmapsByAdding:changing:removing:error:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSArray *arg_toAdd = GetNullableObjectAtIndex(args, 0); NSArray *arg_toChange = GetNullableObjectAtIndex(args, 1); NSArray *arg_idsToRemove = GetNullableObjectAtIndex(args, 2); FlutterError *error; - [api updateHeatmapsByAdding:arg_toAdd changing:arg_toChange removing:arg_idsToRemove error:&error]; + [api updateHeatmapsByAdding:arg_toAdd + changing:arg_toChange + removing:arg_idsToRemove + error:&error]; callback(wrapResult(nil, error)); }]; } else { @@ -1916,13 +1961,18 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, NSObj } /// Updates the set of custer managers for clusters on the map. { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateClusterManagers", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsApi.updateClusterManagers", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(updateClusterManagersByAdding:removing:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(updateClusterManagersByAdding:removing:error:)", api); + NSCAssert([api respondsToSelector:@selector(updateClusterManagersByAdding:removing:error:)], + @"FGMMapsApi api (%@) doesn't respond to " + @"@selector(updateClusterManagersByAdding:removing:error:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSArray *arg_toAdd = GetNullableObjectAtIndex(args, 0); @@ -1937,20 +1987,29 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, NSObj } /// Updates the set of markers on the map. { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateMarkers", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat: + @"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateMarkers", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(updateMarkersByAdding:changing:removing:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(updateMarkersByAdding:changing:removing:error:)", api); + NSCAssert([api respondsToSelector:@selector(updateMarkersByAdding:changing:removing:error:)], + @"FGMMapsApi api (%@) doesn't respond to " + @"@selector(updateMarkersByAdding:changing:removing:error:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSArray *arg_toAdd = GetNullableObjectAtIndex(args, 0); NSArray *arg_toChange = GetNullableObjectAtIndex(args, 1); NSArray *arg_idsToRemove = GetNullableObjectAtIndex(args, 2); FlutterError *error; - [api updateMarkersByAdding:arg_toAdd changing:arg_toChange removing:arg_idsToRemove error:&error]; + [api updateMarkersByAdding:arg_toAdd + changing:arg_toChange + removing:arg_idsToRemove + error:&error]; callback(wrapResult(nil, error)); }]; } else { @@ -1959,20 +2018,28 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, NSObj } /// Updates the set of polygonss on the map. { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updatePolygons", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsApi.updatePolygons", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(updatePolygonsByAdding:changing:removing:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(updatePolygonsByAdding:changing:removing:error:)", api); + NSCAssert([api respondsToSelector:@selector(updatePolygonsByAdding:changing:removing:error:)], + @"FGMMapsApi api (%@) doesn't respond to " + @"@selector(updatePolygonsByAdding:changing:removing:error:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSArray *arg_toAdd = GetNullableObjectAtIndex(args, 0); NSArray *arg_toChange = GetNullableObjectAtIndex(args, 1); NSArray *arg_idsToRemove = GetNullableObjectAtIndex(args, 2); FlutterError *error; - [api updatePolygonsByAdding:arg_toAdd changing:arg_toChange removing:arg_idsToRemove error:&error]; + [api updatePolygonsByAdding:arg_toAdd + changing:arg_toChange + removing:arg_idsToRemove + error:&error]; callback(wrapResult(nil, error)); }]; } else { @@ -1981,20 +2048,29 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, NSObj } /// Updates the set of polylines on the map. { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updatePolylines", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsApi.updatePolylines", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(updatePolylinesByAdding:changing:removing:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(updatePolylinesByAdding:changing:removing:error:)", api); + NSCAssert([api respondsToSelector:@selector(updatePolylinesByAdding: + changing:removing:error:)], + @"FGMMapsApi api (%@) doesn't respond to " + @"@selector(updatePolylinesByAdding:changing:removing:error:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSArray *arg_toAdd = GetNullableObjectAtIndex(args, 0); NSArray *arg_toChange = GetNullableObjectAtIndex(args, 1); NSArray *arg_idsToRemove = GetNullableObjectAtIndex(args, 2); FlutterError *error; - [api updatePolylinesByAdding:arg_toAdd changing:arg_toChange removing:arg_idsToRemove error:&error]; + [api updatePolylinesByAdding:arg_toAdd + changing:arg_toChange + removing:arg_idsToRemove + error:&error]; callback(wrapResult(nil, error)); }]; } else { @@ -2003,20 +2079,29 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, NSObj } /// Updates the set of tile overlays on the map. { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateTileOverlays", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsApi.updateTileOverlays", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(updateTileOverlaysByAdding:changing:removing:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(updateTileOverlaysByAdding:changing:removing:error:)", api); + NSCAssert([api respondsToSelector:@selector(updateTileOverlaysByAdding: + changing:removing:error:)], + @"FGMMapsApi api (%@) doesn't respond to " + @"@selector(updateTileOverlaysByAdding:changing:removing:error:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSArray *arg_toAdd = GetNullableObjectAtIndex(args, 0); NSArray *arg_toChange = GetNullableObjectAtIndex(args, 1); NSArray *arg_idsToRemove = GetNullableObjectAtIndex(args, 2); FlutterError *error; - [api updateTileOverlaysByAdding:arg_toAdd changing:arg_toChange removing:arg_idsToRemove error:&error]; + [api updateTileOverlaysByAdding:arg_toAdd + changing:arg_toChange + removing:arg_idsToRemove + error:&error]; callback(wrapResult(nil, error)); }]; } else { @@ -2025,13 +2110,18 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, NSObj } /// Gets the screen coordinate for the given map location. { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getScreenCoordinate", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsApi.getScreenCoordinate", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(screenCoordinatesForLatLng:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(screenCoordinatesForLatLng:error:)", api); + NSCAssert( + [api respondsToSelector:@selector(screenCoordinatesForLatLng:error:)], + @"FGMMapsApi api (%@) doesn't respond to @selector(screenCoordinatesForLatLng:error:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; FGMPlatformLatLng *arg_latLng = GetNullableObjectAtIndex(args, 0); @@ -2045,18 +2135,25 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, NSObj } /// Gets the map location for the given screen coordinate. { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getLatLng", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName: + [NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getLatLng", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(latLngForScreenCoordinate:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(latLngForScreenCoordinate:error:)", api); + NSCAssert( + [api respondsToSelector:@selector(latLngForScreenCoordinate:error:)], + @"FGMMapsApi api (%@) doesn't respond to @selector(latLngForScreenCoordinate:error:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; FGMPlatformPoint *arg_screenCoordinate = GetNullableObjectAtIndex(args, 0); FlutterError *error; - FGMPlatformLatLng *output = [api latLngForScreenCoordinate:arg_screenCoordinate error:&error]; + FGMPlatformLatLng *output = [api latLngForScreenCoordinate:arg_screenCoordinate + error:&error]; callback(wrapResult(output, error)); }]; } else { @@ -2065,13 +2162,16 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, NSObj } /// Gets the map region currently displayed on the map. { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getVisibleRegion", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsApi.getVisibleRegion", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(visibleMapRegion:)], @"FGMMapsApi api (%@) doesn't respond to @selector(visibleMapRegion:)", api); + NSCAssert([api respondsToSelector:@selector(visibleMapRegion:)], + @"FGMMapsApi api (%@) doesn't respond to @selector(visibleMapRegion:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; FGMPlatformLatLngBounds *output = [api visibleMapRegion:&error]; @@ -2084,13 +2184,18 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, NSObj /// Moves the camera according to [cameraUpdate] immediately, with no /// animation. { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.moveCamera", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat: + @"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.moveCamera", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(moveCameraWithUpdate:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(moveCameraWithUpdate:error:)", api); + NSCAssert([api respondsToSelector:@selector(moveCameraWithUpdate:error:)], + @"FGMMapsApi api (%@) doesn't respond to @selector(moveCameraWithUpdate:error:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; FGMPlatformCameraUpdate *arg_cameraUpdate = GetNullableObjectAtIndex(args, 0); @@ -2104,13 +2209,18 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, NSObj } /// Moves the camera according to [cameraUpdate], animating the update. { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.animateCamera", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat: + @"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.animateCamera", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(animateCameraWithUpdate:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(animateCameraWithUpdate:error:)", api); + NSCAssert([api respondsToSelector:@selector(animateCameraWithUpdate:error:)], + @"FGMMapsApi api (%@) doesn't respond to @selector(animateCameraWithUpdate:error:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; FGMPlatformCameraUpdate *arg_cameraUpdate = GetNullableObjectAtIndex(args, 0); @@ -2124,13 +2234,17 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, NSObj } /// Gets the current map zoom level. { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getZoomLevel", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat: + @"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getZoomLevel", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(currentZoomLevel:)], @"FGMMapsApi api (%@) doesn't respond to @selector(currentZoomLevel:)", api); + NSCAssert([api respondsToSelector:@selector(currentZoomLevel:)], + @"FGMMapsApi api (%@) doesn't respond to @selector(currentZoomLevel:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; NSNumber *output = [api currentZoomLevel:&error]; @@ -2142,13 +2256,18 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, NSObj } /// Show the info window for the marker with the given ID. { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.showInfoWindow", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsApi.showInfoWindow", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(showInfoWindowForMarkerWithIdentifier:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(showInfoWindowForMarkerWithIdentifier:error:)", api); + NSCAssert([api respondsToSelector:@selector(showInfoWindowForMarkerWithIdentifier:error:)], + @"FGMMapsApi api (%@) doesn't respond to " + @"@selector(showInfoWindowForMarkerWithIdentifier:error:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSString *arg_markerId = GetNullableObjectAtIndex(args, 0); @@ -2162,13 +2281,18 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, NSObj } /// Hide the info window for the marker with the given ID. { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.hideInfoWindow", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsApi.hideInfoWindow", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(hideInfoWindowForMarkerWithIdentifier:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(hideInfoWindowForMarkerWithIdentifier:error:)", api); + NSCAssert([api respondsToSelector:@selector(hideInfoWindowForMarkerWithIdentifier:error:)], + @"FGMMapsApi api (%@) doesn't respond to " + @"@selector(hideInfoWindowForMarkerWithIdentifier:error:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSString *arg_markerId = GetNullableObjectAtIndex(args, 0); @@ -2183,18 +2307,25 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, NSObj /// Returns true if the marker with the given ID is currently displaying its /// info window. { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.isInfoWindowShown", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsApi.isInfoWindowShown", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(isShowingInfoWindowForMarkerWithIdentifier:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(isShowingInfoWindowForMarkerWithIdentifier:error:)", api); + NSCAssert([api respondsToSelector:@selector(isShowingInfoWindowForMarkerWithIdentifier: + error:)], + @"FGMMapsApi api (%@) doesn't respond to " + @"@selector(isShowingInfoWindowForMarkerWithIdentifier:error:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSString *arg_markerId = GetNullableObjectAtIndex(args, 0); FlutterError *error; - NSNumber *output = [api isShowingInfoWindowForMarkerWithIdentifier:arg_markerId error:&error]; + NSNumber *output = [api isShowingInfoWindowForMarkerWithIdentifier:arg_markerId + error:&error]; callback(wrapResult(output, error)); }]; } else { @@ -2207,13 +2338,17 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, NSObj /// If there was an error setting the style, such as an invalid style string, /// returns the error message. { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.setStyle", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName: + [NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.setStyle", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(setStyle:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(setStyle:error:)", api); + NSCAssert([api respondsToSelector:@selector(setStyle:error:)], + @"FGMMapsApi api (%@) doesn't respond to @selector(setStyle:error:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSString *arg_style = GetNullableObjectAtIndex(args, 0); @@ -2231,13 +2366,16 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, NSObj /// This allows checking asynchronously for initial style failures, as there /// is no way to return failures from map initialization. { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getLastStyleError", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsApi.getLastStyleError", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(lastStyleError:)], @"FGMMapsApi api (%@) doesn't respond to @selector(lastStyleError:)", api); + NSCAssert([api respondsToSelector:@selector(lastStyleError:)], + @"FGMMapsApi api (%@) doesn't respond to @selector(lastStyleError:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; NSString *output = [api lastStyleError:&error]; @@ -2249,13 +2387,18 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, NSObj } /// Clears the cache of tiles previously requseted from the tile provider. { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.clearTileCache", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsApi.clearTileCache", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(clearTileCacheForOverlayWithIdentifier:error:)], @"FGMMapsApi api (%@) doesn't respond to @selector(clearTileCacheForOverlayWithIdentifier:error:)", api); + NSCAssert([api respondsToSelector:@selector(clearTileCacheForOverlayWithIdentifier:error:)], + @"FGMMapsApi api (%@) doesn't respond to " + @"@selector(clearTileCacheForOverlayWithIdentifier:error:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSString *arg_tileOverlayId = GetNullableObjectAtIndex(args, 0); @@ -2269,13 +2412,17 @@ void SetUpFGMMapsApiWithSuffix(id binaryMessenger, NSObj } /// Takes a snapshot of the map and returns its image data. { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.takeSnapshot", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat: + @"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.takeSnapshot", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(takeSnapshotWithError:)], @"FGMMapsApi api (%@) doesn't respond to @selector(takeSnapshotWithError:)", api); + NSCAssert([api respondsToSelector:@selector(takeSnapshotWithError:)], + @"FGMMapsApi api (%@) doesn't respond to @selector(takeSnapshotWithError:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; FlutterStandardTypedData *output = [api takeSnapshotWithError:&error]; @@ -2296,316 +2443,425 @@ @implementation FGMMapsCallbackApi - (instancetype)initWithBinaryMessenger:(NSObject *)binaryMessenger { return [self initWithBinaryMessenger:binaryMessenger messageChannelSuffix:@""]; } -- (instancetype)initWithBinaryMessenger:(NSObject *)binaryMessenger messageChannelSuffix:(nullable NSString*)messageChannelSuffix{ +- (instancetype)initWithBinaryMessenger:(NSObject *)binaryMessenger + messageChannelSuffix:(nullable NSString *)messageChannelSuffix { self = [self init]; if (self) { _binaryMessenger = binaryMessenger; - _messageChannelSuffix = [messageChannelSuffix length] == 0 ? @"" : [NSString stringWithFormat: @".%@", messageChannelSuffix]; + _messageChannelSuffix = [messageChannelSuffix length] == 0 + ? @"" + : [NSString stringWithFormat:@".%@", messageChannelSuffix]; } return self; } - (void)didStartCameraMoveWithCompletion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraMoveStarted", _messageChannelSuffix]; + NSString *channelName = [NSString + stringWithFormat: + @"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraMoveStarted", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel - messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:nil reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)didMoveCameraToPosition:(FGMPlatformCameraPosition *)arg_cameraPosition completion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraMove", _messageChannelSuffix]; + [FlutterBasicMessageChannel messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:nil + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)didMoveCameraToPosition:(FGMPlatformCameraPosition *)arg_cameraPosition + completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraMove", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel - messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[arg_cameraPosition ?: [NSNull null]] reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; + [FlutterBasicMessageChannel messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[ arg_cameraPosition ?: [NSNull null] ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; } - (void)didIdleCameraWithCompletion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraIdle", _messageChannelSuffix]; + NSString *channelName = [NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraIdle", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel - messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:nil reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)didTapAtPosition:(FGMPlatformLatLng *)arg_position completion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onTap", _messageChannelSuffix]; + [FlutterBasicMessageChannel messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:nil + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)didTapAtPosition:(FGMPlatformLatLng *)arg_position + completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString + stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onTap", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel - messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[arg_position ?: [NSNull null]] reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)didLongPressAtPosition:(FGMPlatformLatLng *)arg_position completion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onLongPress", _messageChannelSuffix]; + [FlutterBasicMessageChannel messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[ arg_position ?: [NSNull null] ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)didLongPressAtPosition:(FGMPlatformLatLng *)arg_position + completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onLongPress", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel - messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[arg_position ?: [NSNull null]] reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)didTapMarkerWithIdentifier:(NSString *)arg_markerId completion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerTap", _messageChannelSuffix]; + [FlutterBasicMessageChannel messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[ arg_position ?: [NSNull null] ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)didTapMarkerWithIdentifier:(NSString *)arg_markerId + completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerTap", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel - messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[arg_markerId ?: [NSNull null]] reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)didStartDragForMarkerWithIdentifier:(NSString *)arg_markerId atPosition:(FGMPlatformLatLng *)arg_position completion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDragStart", _messageChannelSuffix]; + [FlutterBasicMessageChannel messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[ arg_markerId ?: [NSNull null] ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)didStartDragForMarkerWithIdentifier:(NSString *)arg_markerId + atPosition:(FGMPlatformLatLng *)arg_position + completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString + stringWithFormat: + @"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDragStart", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel - messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[arg_markerId ?: [NSNull null], arg_position ?: [NSNull null]] reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)didDragMarkerWithIdentifier:(NSString *)arg_markerId atPosition:(FGMPlatformLatLng *)arg_position completion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDrag", _messageChannelSuffix]; + [FlutterBasicMessageChannel messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[ arg_markerId ?: [NSNull null], arg_position ?: [NSNull null] ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)didDragMarkerWithIdentifier:(NSString *)arg_markerId + atPosition:(FGMPlatformLatLng *)arg_position + completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDrag", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel - messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[arg_markerId ?: [NSNull null], arg_position ?: [NSNull null]] reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)didEndDragForMarkerWithIdentifier:(NSString *)arg_markerId atPosition:(FGMPlatformLatLng *)arg_position completion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDragEnd", _messageChannelSuffix]; + [FlutterBasicMessageChannel messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[ arg_markerId ?: [NSNull null], arg_position ?: [NSNull null] ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)didEndDragForMarkerWithIdentifier:(NSString *)arg_markerId + atPosition:(FGMPlatformLatLng *)arg_position + completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString + stringWithFormat: + @"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDragEnd", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel - messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[arg_markerId ?: [NSNull null], arg_position ?: [NSNull null]] reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)didTapInfoWindowOfMarkerWithIdentifier:(NSString *)arg_markerId completion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onInfoWindowTap", _messageChannelSuffix]; + [FlutterBasicMessageChannel messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[ arg_markerId ?: [NSNull null], arg_position ?: [NSNull null] ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)didTapInfoWindowOfMarkerWithIdentifier:(NSString *)arg_markerId + completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString + stringWithFormat: + @"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onInfoWindowTap", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel - messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[arg_markerId ?: [NSNull null]] reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)didTapCircleWithIdentifier:(NSString *)arg_circleId completion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCircleTap", _messageChannelSuffix]; + [FlutterBasicMessageChannel messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[ arg_markerId ?: [NSNull null] ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)didTapCircleWithIdentifier:(NSString *)arg_circleId + completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCircleTap", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel - messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[arg_circleId ?: [NSNull null]] reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)didTapCluster:(FGMPlatformCluster *)arg_cluster completion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onClusterTap", _messageChannelSuffix]; + [FlutterBasicMessageChannel messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[ arg_circleId ?: [NSNull null] ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)didTapCluster:(FGMPlatformCluster *)arg_cluster + completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onClusterTap", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel - messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[arg_cluster ?: [NSNull null]] reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)didTapPolygonWithIdentifier:(NSString *)arg_polygonId completion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onPolygonTap", _messageChannelSuffix]; + [FlutterBasicMessageChannel messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[ arg_cluster ?: [NSNull null] ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)didTapPolygonWithIdentifier:(NSString *)arg_polygonId + completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onPolygonTap", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel - messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[arg_polygonId ?: [NSNull null]] reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)didTapPolylineWithIdentifier:(NSString *)arg_polylineId completion:(void (^)(FlutterError *_Nullable))completion { - NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onPolylineTap", _messageChannelSuffix]; + [FlutterBasicMessageChannel messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[ arg_polygonId ?: [NSNull null] ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)didTapPolylineWithIdentifier:(NSString *)arg_polylineId + completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onPolylineTap", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel - messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[arg_polylineId ?: [NSNull null]] reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); - } else { - completion(nil); - } - } else { - completion(createConnectionError(channelName)); - } - }]; -} -- (void)tileWithOverlayIdentifier:(NSString *)arg_tileOverlayId location:(FGMPlatformPoint *)arg_location zoom:(NSInteger)arg_zoom completion:(void (^)(FGMPlatformTile *_Nullable, FlutterError *_Nullable))completion { - NSString *channelName = [NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.getTileOverlayTile", _messageChannelSuffix]; + [FlutterBasicMessageChannel messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[ arg_polylineId ?: [NSNull null] ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; +} +- (void)tileWithOverlayIdentifier:(NSString *)arg_tileOverlayId + location:(FGMPlatformPoint *)arg_location + zoom:(NSInteger)arg_zoom + completion:(void (^)(FGMPlatformTile *_Nullable, + FlutterError *_Nullable))completion { + NSString *channelName = [NSString + stringWithFormat: + @"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.getTileOverlayTile", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = - [FlutterBasicMessageChannel - messageChannelWithName:channelName - binaryMessenger:self.binaryMessenger - codec:FGMGetMessagesCodec()]; - [channel sendMessage:@[arg_tileOverlayId ?: [NSNull null], arg_location ?: [NSNull null], @(arg_zoom)] reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion(nil, [FlutterError errorWithCode:reply[0] message:reply[1] details:reply[2]]); - } else { - FGMPlatformTile *output = reply[0] == [NSNull null] ? nil : reply[0]; - completion(output, nil); - } - } else { - completion(nil, createConnectionError(channelName)); - } - }]; -} -@end - -void SetUpFGMMapsPlatformViewApi(id binaryMessenger, NSObject *api) { + [FlutterBasicMessageChannel messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FGMGetMessagesCodec()]; + [channel sendMessage:@[ + arg_tileOverlayId ?: [NSNull null], arg_location ?: [NSNull null], @(arg_zoom) + ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion(nil, [FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + FGMPlatformTile *output = reply[0] == [NSNull null] ? nil : reply[0]; + completion(output, nil); + } + } else { + completion(nil, createConnectionError(channelName)); + } + }]; +} +@end + +void SetUpFGMMapsPlatformViewApi(id binaryMessenger, + NSObject *api) { SetUpFGMMapsPlatformViewApiWithSuffix(binaryMessenger, api, @""); } -void SetUpFGMMapsPlatformViewApiWithSuffix(id binaryMessenger, NSObject *api, NSString *messageChannelSuffix) { - messageChannelSuffix = messageChannelSuffix.length > 0 ? [NSString stringWithFormat: @".%@", messageChannelSuffix] : @""; +void SetUpFGMMapsPlatformViewApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsPlatformViewApi.createView", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsPlatformViewApi.createView", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(createViewType:error:)], @"FGMMapsPlatformViewApi api (%@) doesn't respond to @selector(createViewType:error:)", api); + NSCAssert( + [api respondsToSelector:@selector(createViewType:error:)], + @"FGMMapsPlatformViewApi api (%@) doesn't respond to @selector(createViewType:error:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; FGMPlatformMapViewCreationParams *arg_type = GetNullableObjectAtIndex(args, 0); @@ -2618,20 +2874,30 @@ void SetUpFGMMapsPlatformViewApiWithSuffix(id binaryMess } } } -void SetUpFGMMapsInspectorApi(id binaryMessenger, NSObject *api) { +void SetUpFGMMapsInspectorApi(id binaryMessenger, + NSObject *api) { SetUpFGMMapsInspectorApiWithSuffix(binaryMessenger, api, @""); } -void SetUpFGMMapsInspectorApiWithSuffix(id binaryMessenger, NSObject *api, NSString *messageChannelSuffix) { - messageChannelSuffix = messageChannelSuffix.length > 0 ? [NSString stringWithFormat: @".%@", messageChannelSuffix] : @""; +void SetUpFGMMapsInspectorApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areBuildingsEnabled", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsInspectorApi.areBuildingsEnabled", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(areBuildingsEnabledWithError:)], @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(areBuildingsEnabledWithError:)", api); + NSCAssert([api respondsToSelector:@selector(areBuildingsEnabledWithError:)], + @"FGMMapsInspectorApi api (%@) doesn't respond to " + @"@selector(areBuildingsEnabledWithError:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; NSNumber *output = [api areBuildingsEnabledWithError:&error]; @@ -2642,13 +2908,18 @@ void SetUpFGMMapsInspectorApiWithSuffix(id binaryMesseng } } { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areRotateGesturesEnabled", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsInspectorApi.areRotateGesturesEnabled", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(areRotateGesturesEnabledWithError:)], @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(areRotateGesturesEnabledWithError:)", api); + NSCAssert([api respondsToSelector:@selector(areRotateGesturesEnabledWithError:)], + @"FGMMapsInspectorApi api (%@) doesn't respond to " + @"@selector(areRotateGesturesEnabledWithError:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; NSNumber *output = [api areRotateGesturesEnabledWithError:&error]; @@ -2659,13 +2930,18 @@ void SetUpFGMMapsInspectorApiWithSuffix(id binaryMesseng } } { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areScrollGesturesEnabled", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsInspectorApi.areScrollGesturesEnabled", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(areScrollGesturesEnabledWithError:)], @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(areScrollGesturesEnabledWithError:)", api); + NSCAssert([api respondsToSelector:@selector(areScrollGesturesEnabledWithError:)], + @"FGMMapsInspectorApi api (%@) doesn't respond to " + @"@selector(areScrollGesturesEnabledWithError:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; NSNumber *output = [api areScrollGesturesEnabledWithError:&error]; @@ -2676,13 +2952,18 @@ void SetUpFGMMapsInspectorApiWithSuffix(id binaryMesseng } } { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areTiltGesturesEnabled", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsInspectorApi.areTiltGesturesEnabled", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(areTiltGesturesEnabledWithError:)], @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(areTiltGesturesEnabledWithError:)", api); + NSCAssert([api respondsToSelector:@selector(areTiltGesturesEnabledWithError:)], + @"FGMMapsInspectorApi api (%@) doesn't respond to " + @"@selector(areTiltGesturesEnabledWithError:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; NSNumber *output = [api areTiltGesturesEnabledWithError:&error]; @@ -2693,13 +2974,18 @@ void SetUpFGMMapsInspectorApiWithSuffix(id binaryMesseng } } { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areZoomGesturesEnabled", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsInspectorApi.areZoomGesturesEnabled", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(areZoomGesturesEnabledWithError:)], @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(areZoomGesturesEnabledWithError:)", api); + NSCAssert([api respondsToSelector:@selector(areZoomGesturesEnabledWithError:)], + @"FGMMapsInspectorApi api (%@) doesn't respond to " + @"@selector(areZoomGesturesEnabledWithError:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; NSNumber *output = [api areZoomGesturesEnabledWithError:&error]; @@ -2710,13 +2996,18 @@ void SetUpFGMMapsInspectorApiWithSuffix(id binaryMesseng } } { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.isCompassEnabled", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsInspectorApi.isCompassEnabled", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(isCompassEnabledWithError:)], @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(isCompassEnabledWithError:)", api); + NSCAssert( + [api respondsToSelector:@selector(isCompassEnabledWithError:)], + @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(isCompassEnabledWithError:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; NSNumber *output = [api isCompassEnabledWithError:&error]; @@ -2727,13 +3018,18 @@ void SetUpFGMMapsInspectorApiWithSuffix(id binaryMesseng } } { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.isMyLocationButtonEnabled", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsInspectorApi.isMyLocationButtonEnabled", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(isMyLocationButtonEnabledWithError:)], @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(isMyLocationButtonEnabledWithError:)", api); + NSCAssert([api respondsToSelector:@selector(isMyLocationButtonEnabledWithError:)], + @"FGMMapsInspectorApi api (%@) doesn't respond to " + @"@selector(isMyLocationButtonEnabledWithError:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; NSNumber *output = [api isMyLocationButtonEnabledWithError:&error]; @@ -2744,13 +3040,18 @@ void SetUpFGMMapsInspectorApiWithSuffix(id binaryMesseng } } { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.isTrafficEnabled", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsInspectorApi.isTrafficEnabled", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(isTrafficEnabledWithError:)], @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(isTrafficEnabledWithError:)", api); + NSCAssert( + [api respondsToSelector:@selector(isTrafficEnabledWithError:)], + @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(isTrafficEnabledWithError:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; NSNumber *output = [api isTrafficEnabledWithError:&error]; @@ -2761,18 +3062,24 @@ void SetUpFGMMapsInspectorApiWithSuffix(id binaryMesseng } } { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.getTileOverlayInfo", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsInspectorApi.getTileOverlayInfo", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(tileOverlayWithIdentifier:error:)], @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(tileOverlayWithIdentifier:error:)", api); + NSCAssert([api respondsToSelector:@selector(tileOverlayWithIdentifier:error:)], + @"FGMMapsInspectorApi api (%@) doesn't respond to " + @"@selector(tileOverlayWithIdentifier:error:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSString *arg_tileOverlayId = GetNullableObjectAtIndex(args, 0); FlutterError *error; - FGMPlatformTileLayer *output = [api tileOverlayWithIdentifier:arg_tileOverlayId error:&error]; + FGMPlatformTileLayer *output = [api tileOverlayWithIdentifier:arg_tileOverlayId + error:&error]; callback(wrapResult(output, error)); }]; } else { @@ -2780,13 +3087,18 @@ void SetUpFGMMapsInspectorApiWithSuffix(id binaryMesseng } } { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.getHeatmapInfo", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsInspectorApi.getHeatmapInfo", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(heatmapWithIdentifier:error:)], @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(heatmapWithIdentifier:error:)", api); + NSCAssert([api respondsToSelector:@selector(heatmapWithIdentifier:error:)], + @"FGMMapsInspectorApi api (%@) doesn't respond to " + @"@selector(heatmapWithIdentifier:error:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSString *arg_heatmapId = GetNullableObjectAtIndex(args, 0); @@ -2799,13 +3111,16 @@ void SetUpFGMMapsInspectorApiWithSuffix(id binaryMesseng } } { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.getZoomRange", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsInspectorApi.getZoomRange", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(zoomRange:)], @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(zoomRange:)", api); + NSCAssert([api respondsToSelector:@selector(zoomRange:)], + @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(zoomRange:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; FGMPlatformZoomRange *output = [api zoomRange:&error]; @@ -2816,18 +3131,24 @@ void SetUpFGMMapsInspectorApiWithSuffix(id binaryMesseng } } { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.getClusters", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsInspectorApi.getClusters", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(clustersWithIdentifier:error:)], @"FGMMapsInspectorApi api (%@) doesn't respond to @selector(clustersWithIdentifier:error:)", api); + NSCAssert([api respondsToSelector:@selector(clustersWithIdentifier:error:)], + @"FGMMapsInspectorApi api (%@) doesn't respond to " + @"@selector(clustersWithIdentifier:error:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSString *arg_clusterManagerId = GetNullableObjectAtIndex(args, 0); FlutterError *error; - NSArray *output = [api clustersWithIdentifier:arg_clusterManagerId error:&error]; + NSArray *output = [api clustersWithIdentifier:arg_clusterManagerId + error:&error]; callback(wrapResult(output, error)); }]; } else { @@ -2835,21 +3156,31 @@ void SetUpFGMMapsInspectorApiWithSuffix(id binaryMesseng } } } -void SetUpFGMImageRegistryApi(id binaryMessenger, NSObject *api) { +void SetUpFGMImageRegistryApi(id binaryMessenger, + NSObject *api) { SetUpFGMImageRegistryApiWithSuffix(binaryMessenger, api, @""); } -void SetUpFGMImageRegistryApiWithSuffix(id binaryMessenger, NSObject *api, NSString *messageChannelSuffix) { - messageChannelSuffix = messageChannelSuffix.length > 0 ? [NSString stringWithFormat: @".%@", messageChannelSuffix] : @""; +void SetUpFGMImageRegistryApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; /// Adds a bitmap to the cache. { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.ImageRegistryApi.addBitmapToCache", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"ImageRegistryApi.addBitmapToCache", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(addBitmapToCacheId:bitmap:error:)], @"FGMImageRegistryApi api (%@) doesn't respond to @selector(addBitmapToCacheId:bitmap:error:)", api); + NSCAssert([api respondsToSelector:@selector(addBitmapToCacheId:bitmap:error:)], + @"FGMImageRegistryApi api (%@) doesn't respond to " + @"@selector(addBitmapToCacheId:bitmap:error:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSInteger arg_id = [GetNullableObjectAtIndex(args, 0) integerValue]; @@ -2864,13 +3195,18 @@ void SetUpFGMImageRegistryApiWithSuffix(id binaryMesseng } /// Retrieves a bitmap from the cache. { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.ImageRegistryApi.removeBitmapFromCache", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"ImageRegistryApi.removeBitmapFromCache", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(removeBitmapFromCacheId:error:)], @"FGMImageRegistryApi api (%@) doesn't respond to @selector(removeBitmapFromCacheId:error:)", api); + NSCAssert([api respondsToSelector:@selector(removeBitmapFromCacheId:error:)], + @"FGMImageRegistryApi api (%@) doesn't respond to " + @"@selector(removeBitmapFromCacheId:error:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSInteger arg_id = [GetNullableObjectAtIndex(args, 0) integerValue]; @@ -2884,13 +3220,18 @@ void SetUpFGMImageRegistryApiWithSuffix(id binaryMesseng } /// Clears the bitmap cache. { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.google_maps_flutter_ios.ImageRegistryApi.clearBitmapCache", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"ImageRegistryApi.clearBitmapCache", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FGMGetMessagesCodec()]; + codec:FGMGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(clearBitmapCacheWithError:)], @"FGMImageRegistryApi api (%@) doesn't respond to @selector(clearBitmapCacheWithError:)", api); + NSCAssert( + [api respondsToSelector:@selector(clearBitmapCacheWithError:)], + @"FGMImageRegistryApi api (%@) doesn't respond to @selector(clearBitmapCacheWithError:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; [api clearBitmapCacheWithError:&error]; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/messages.g.dart b/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/messages.g.dart index 9747a7e1776..be26c1ce90d 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/messages.g.dart +++ b/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/messages.g.dart @@ -18,7 +18,8 @@ PlatformException _createConnectionError(String channelName) { ); } -List wrapResponse({Object? result, PlatformException? error, bool empty = false}) { +List wrapResponse( + {Object? result, PlatformException? error, bool empty = false}) { if (empty) { return []; } @@ -990,8 +991,10 @@ class PlatformMapViewCreationParams { initialPolygons: (result[4] as List?)!.cast(), initialPolylines: (result[5] as List?)!.cast(), initialHeatmaps: (result[6] as List?)!.cast(), - initialTileOverlays: (result[7] as List?)!.cast(), - initialClusterManagers: (result[8] as List?)!.cast(), + initialTileOverlays: + (result[7] as List?)!.cast(), + initialClusterManagers: + (result[8] as List?)!.cast(), ); } } @@ -1461,7 +1464,6 @@ class PlatformBitmapRegisteredMapBitmap { } } - class _PigeonCodec extends StandardMessageCodec { const _PigeonCodec(); @override @@ -1469,133 +1471,133 @@ class _PigeonCodec extends StandardMessageCodec { if (value is int) { buffer.putUint8(4); buffer.putInt64(value); - } else if (value is PlatformMapType) { + } else if (value is PlatformMapType) { buffer.putUint8(129); writeValue(buffer, value.index); - } else if (value is PlatformJointType) { + } else if (value is PlatformJointType) { buffer.putUint8(130); writeValue(buffer, value.index); - } else if (value is PlatformPatternItemType) { + } else if (value is PlatformPatternItemType) { buffer.putUint8(131); writeValue(buffer, value.index); - } else if (value is PlatformMapBitmapScaling) { + } else if (value is PlatformMapBitmapScaling) { buffer.putUint8(132); writeValue(buffer, value.index); - } else if (value is PlatformCameraPosition) { + } else if (value is PlatformCameraPosition) { buffer.putUint8(133); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdate) { + } else if (value is PlatformCameraUpdate) { buffer.putUint8(134); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateNewCameraPosition) { + } else if (value is PlatformCameraUpdateNewCameraPosition) { buffer.putUint8(135); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateNewLatLng) { + } else if (value is PlatformCameraUpdateNewLatLng) { buffer.putUint8(136); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateNewLatLngBounds) { + } else if (value is PlatformCameraUpdateNewLatLngBounds) { buffer.putUint8(137); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateNewLatLngZoom) { + } else if (value is PlatformCameraUpdateNewLatLngZoom) { buffer.putUint8(138); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateScrollBy) { + } else if (value is PlatformCameraUpdateScrollBy) { buffer.putUint8(139); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateZoomBy) { + } else if (value is PlatformCameraUpdateZoomBy) { buffer.putUint8(140); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateZoom) { + } else if (value is PlatformCameraUpdateZoom) { buffer.putUint8(141); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraUpdateZoomTo) { + } else if (value is PlatformCameraUpdateZoomTo) { buffer.putUint8(142); writeValue(buffer, value.encode()); - } else if (value is PlatformCircle) { + } else if (value is PlatformCircle) { buffer.putUint8(143); writeValue(buffer, value.encode()); - } else if (value is PlatformHeatmap) { + } else if (value is PlatformHeatmap) { buffer.putUint8(144); writeValue(buffer, value.encode()); - } else if (value is PlatformInfoWindow) { + } else if (value is PlatformInfoWindow) { buffer.putUint8(145); writeValue(buffer, value.encode()); - } else if (value is PlatformCluster) { + } else if (value is PlatformCluster) { buffer.putUint8(146); writeValue(buffer, value.encode()); - } else if (value is PlatformClusterManager) { + } else if (value is PlatformClusterManager) { buffer.putUint8(147); writeValue(buffer, value.encode()); - } else if (value is PlatformMarker) { + } else if (value is PlatformMarker) { buffer.putUint8(148); writeValue(buffer, value.encode()); - } else if (value is PlatformPolygon) { + } else if (value is PlatformPolygon) { buffer.putUint8(149); writeValue(buffer, value.encode()); - } else if (value is PlatformPolyline) { + } else if (value is PlatformPolyline) { buffer.putUint8(150); writeValue(buffer, value.encode()); - } else if (value is PlatformPatternItem) { + } else if (value is PlatformPatternItem) { buffer.putUint8(151); writeValue(buffer, value.encode()); - } else if (value is PlatformTile) { + } else if (value is PlatformTile) { buffer.putUint8(152); writeValue(buffer, value.encode()); - } else if (value is PlatformTileOverlay) { + } else if (value is PlatformTileOverlay) { buffer.putUint8(153); writeValue(buffer, value.encode()); - } else if (value is PlatformEdgeInsets) { + } else if (value is PlatformEdgeInsets) { buffer.putUint8(154); writeValue(buffer, value.encode()); - } else if (value is PlatformLatLng) { + } else if (value is PlatformLatLng) { buffer.putUint8(155); writeValue(buffer, value.encode()); - } else if (value is PlatformLatLngBounds) { + } else if (value is PlatformLatLngBounds) { buffer.putUint8(156); writeValue(buffer, value.encode()); - } else if (value is PlatformCameraTargetBounds) { + } else if (value is PlatformCameraTargetBounds) { buffer.putUint8(157); writeValue(buffer, value.encode()); - } else if (value is PlatformMapViewCreationParams) { + } else if (value is PlatformMapViewCreationParams) { buffer.putUint8(158); writeValue(buffer, value.encode()); - } else if (value is PlatformMapConfiguration) { + } else if (value is PlatformMapConfiguration) { buffer.putUint8(159); writeValue(buffer, value.encode()); - } else if (value is PlatformPoint) { + } else if (value is PlatformPoint) { buffer.putUint8(160); writeValue(buffer, value.encode()); - } else if (value is PlatformSize) { + } else if (value is PlatformSize) { buffer.putUint8(161); writeValue(buffer, value.encode()); - } else if (value is PlatformTileLayer) { + } else if (value is PlatformTileLayer) { buffer.putUint8(162); writeValue(buffer, value.encode()); - } else if (value is PlatformZoomRange) { + } else if (value is PlatformZoomRange) { buffer.putUint8(163); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmap) { + } else if (value is PlatformBitmap) { buffer.putUint8(164); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapDefaultMarker) { + } else if (value is PlatformBitmapDefaultMarker) { buffer.putUint8(165); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapBytes) { + } else if (value is PlatformBitmapBytes) { buffer.putUint8(166); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapAsset) { + } else if (value is PlatformBitmapAsset) { buffer.putUint8(167); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapAssetImage) { + } else if (value is PlatformBitmapAssetImage) { buffer.putUint8(168); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapAssetMap) { + } else if (value is PlatformBitmapAssetMap) { buffer.putUint8(169); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapBytesMap) { + } else if (value is PlatformBitmapBytesMap) { buffer.putUint8(170); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapRegisteredMapBitmap) { + } else if (value is PlatformBitmapRegisteredMapBitmap) { buffer.putUint8(171); writeValue(buffer, value.encode()); } else { @@ -1606,95 +1608,95 @@ class _PigeonCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 129: + case 129: final int? value = readValue(buffer) as int?; return value == null ? null : PlatformMapType.values[value]; - case 130: + case 130: final int? value = readValue(buffer) as int?; return value == null ? null : PlatformJointType.values[value]; - case 131: + case 131: final int? value = readValue(buffer) as int?; return value == null ? null : PlatformPatternItemType.values[value]; - case 132: + case 132: final int? value = readValue(buffer) as int?; return value == null ? null : PlatformMapBitmapScaling.values[value]; - case 133: + case 133: return PlatformCameraPosition.decode(readValue(buffer)!); - case 134: + case 134: return PlatformCameraUpdate.decode(readValue(buffer)!); - case 135: + case 135: return PlatformCameraUpdateNewCameraPosition.decode(readValue(buffer)!); - case 136: + case 136: return PlatformCameraUpdateNewLatLng.decode(readValue(buffer)!); - case 137: + case 137: return PlatformCameraUpdateNewLatLngBounds.decode(readValue(buffer)!); - case 138: + case 138: return PlatformCameraUpdateNewLatLngZoom.decode(readValue(buffer)!); - case 139: + case 139: return PlatformCameraUpdateScrollBy.decode(readValue(buffer)!); - case 140: + case 140: return PlatformCameraUpdateZoomBy.decode(readValue(buffer)!); - case 141: + case 141: return PlatformCameraUpdateZoom.decode(readValue(buffer)!); - case 142: + case 142: return PlatformCameraUpdateZoomTo.decode(readValue(buffer)!); - case 143: + case 143: return PlatformCircle.decode(readValue(buffer)!); - case 144: + case 144: return PlatformHeatmap.decode(readValue(buffer)!); - case 145: + case 145: return PlatformInfoWindow.decode(readValue(buffer)!); - case 146: + case 146: return PlatformCluster.decode(readValue(buffer)!); - case 147: + case 147: return PlatformClusterManager.decode(readValue(buffer)!); - case 148: + case 148: return PlatformMarker.decode(readValue(buffer)!); - case 149: + case 149: return PlatformPolygon.decode(readValue(buffer)!); - case 150: + case 150: return PlatformPolyline.decode(readValue(buffer)!); - case 151: + case 151: return PlatformPatternItem.decode(readValue(buffer)!); - case 152: + case 152: return PlatformTile.decode(readValue(buffer)!); - case 153: + case 153: return PlatformTileOverlay.decode(readValue(buffer)!); - case 154: + case 154: return PlatformEdgeInsets.decode(readValue(buffer)!); - case 155: + case 155: return PlatformLatLng.decode(readValue(buffer)!); - case 156: + case 156: return PlatformLatLngBounds.decode(readValue(buffer)!); - case 157: + case 157: return PlatformCameraTargetBounds.decode(readValue(buffer)!); - case 158: + case 158: return PlatformMapViewCreationParams.decode(readValue(buffer)!); - case 159: + case 159: return PlatformMapConfiguration.decode(readValue(buffer)!); - case 160: + case 160: return PlatformPoint.decode(readValue(buffer)!); - case 161: + case 161: return PlatformSize.decode(readValue(buffer)!); - case 162: + case 162: return PlatformTileLayer.decode(readValue(buffer)!); - case 163: + case 163: return PlatformZoomRange.decode(readValue(buffer)!); - case 164: + case 164: return PlatformBitmap.decode(readValue(buffer)!); - case 165: + case 165: return PlatformBitmapDefaultMarker.decode(readValue(buffer)!); - case 166: + case 166: return PlatformBitmapBytes.decode(readValue(buffer)!); - case 167: + case 167: return PlatformBitmapAsset.decode(readValue(buffer)!); - case 168: + case 168: return PlatformBitmapAssetImage.decode(readValue(buffer)!); - case 169: + case 169: return PlatformBitmapAssetMap.decode(readValue(buffer)!); - case 170: + case 170: return PlatformBitmapBytesMap.decode(readValue(buffer)!); - case 171: + case 171: return PlatformBitmapRegisteredMapBitmap.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -1711,7 +1713,8 @@ class MapsApi { /// BinaryMessenger will be used which routes to the host platform. MapsApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) : pigeonVar_binaryMessenger = binaryMessenger, - pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + pigeonVar_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; final BinaryMessenger? pigeonVar_binaryMessenger; static const MessageCodec pigeonChannelCodec = _PigeonCodec(); @@ -1720,8 +1723,10 @@ class MapsApi { /// Returns once the map instance is available. Future waitForMap() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.waitForMap$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.waitForMap$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -1745,15 +1750,18 @@ class MapsApi { /// /// Only non-null configuration values will result in updates; options with /// null values will remain unchanged. - Future updateMapConfiguration(PlatformMapConfiguration configuration) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateMapConfiguration$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + Future updateMapConfiguration( + PlatformMapConfiguration configuration) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateMapConfiguration$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([configuration]) as List?; + final List? pigeonVar_replyList = await pigeonVar_channel + .send([configuration]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1768,15 +1776,18 @@ class MapsApi { } /// Updates the set of circles on the map. - Future updateCircles(List toAdd, List toChange, List idsToRemove) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateCircles$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + Future updateCircles(List toAdd, + List toChange, List idsToRemove) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateCircles$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([toAdd, toChange, idsToRemove]) as List?; + final List? pigeonVar_replyList = await pigeonVar_channel + .send([toAdd, toChange, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1791,15 +1802,18 @@ class MapsApi { } /// Updates the set of heatmaps on the map. - Future updateHeatmaps(List toAdd, List toChange, List idsToRemove) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateHeatmaps$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + Future updateHeatmaps(List toAdd, + List toChange, List idsToRemove) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateHeatmaps$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([toAdd, toChange, idsToRemove]) as List?; + final List? pigeonVar_replyList = await pigeonVar_channel + .send([toAdd, toChange, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1814,15 +1828,18 @@ class MapsApi { } /// Updates the set of custer managers for clusters on the map. - Future updateClusterManagers(List toAdd, List idsToRemove) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateClusterManagers$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + Future updateClusterManagers( + List toAdd, List idsToRemove) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateClusterManagers$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([toAdd, idsToRemove]) as List?; + final List? pigeonVar_replyList = await pigeonVar_channel + .send([toAdd, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1837,15 +1854,18 @@ class MapsApi { } /// Updates the set of markers on the map. - Future updateMarkers(List toAdd, List toChange, List idsToRemove) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateMarkers$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + Future updateMarkers(List toAdd, + List toChange, List idsToRemove) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateMarkers$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([toAdd, toChange, idsToRemove]) as List?; + final List? pigeonVar_replyList = await pigeonVar_channel + .send([toAdd, toChange, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1860,15 +1880,18 @@ class MapsApi { } /// Updates the set of polygonss on the map. - Future updatePolygons(List toAdd, List toChange, List idsToRemove) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updatePolygons$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + Future updatePolygons(List toAdd, + List toChange, List idsToRemove) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updatePolygons$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([toAdd, toChange, idsToRemove]) as List?; + final List? pigeonVar_replyList = await pigeonVar_channel + .send([toAdd, toChange, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1883,15 +1906,18 @@ class MapsApi { } /// Updates the set of polylines on the map. - Future updatePolylines(List toAdd, List toChange, List idsToRemove) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updatePolylines$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + Future updatePolylines(List toAdd, + List toChange, List idsToRemove) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updatePolylines$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([toAdd, toChange, idsToRemove]) as List?; + final List? pigeonVar_replyList = await pigeonVar_channel + .send([toAdd, toChange, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1906,15 +1932,18 @@ class MapsApi { } /// Updates the set of tile overlays on the map. - Future updateTileOverlays(List toAdd, List toChange, List idsToRemove) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateTileOverlays$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + Future updateTileOverlays(List toAdd, + List toChange, List idsToRemove) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.updateTileOverlays$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([toAdd, toChange, idsToRemove]) as List?; + final List? pigeonVar_replyList = await pigeonVar_channel + .send([toAdd, toChange, idsToRemove]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1930,8 +1959,10 @@ class MapsApi { /// Gets the screen coordinate for the given map location. Future getScreenCoordinate(PlatformLatLng latLng) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getScreenCoordinate$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getScreenCoordinate$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -1958,14 +1989,16 @@ class MapsApi { /// Gets the map location for the given screen coordinate. Future getLatLng(PlatformPoint screenCoordinate) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getLatLng$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getLatLng$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([screenCoordinate]) as List?; + final List? pigeonVar_replyList = await pigeonVar_channel + .send([screenCoordinate]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -1986,8 +2019,10 @@ class MapsApi { /// Gets the map region currently displayed on the map. Future getVisibleRegion() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getVisibleRegion$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getVisibleRegion$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2015,8 +2050,10 @@ class MapsApi { /// Moves the camera according to [cameraUpdate] immediately, with no /// animation. Future moveCamera(PlatformCameraUpdate cameraUpdate) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.moveCamera$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.moveCamera$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2038,8 +2075,10 @@ class MapsApi { /// Moves the camera according to [cameraUpdate], animating the update. Future animateCamera(PlatformCameraUpdate cameraUpdate) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.animateCamera$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.animateCamera$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2061,8 +2100,10 @@ class MapsApi { /// Gets the current map zoom level. Future getZoomLevel() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getZoomLevel$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getZoomLevel$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2089,8 +2130,10 @@ class MapsApi { /// Show the info window for the marker with the given ID. Future showInfoWindow(String markerId) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.showInfoWindow$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.showInfoWindow$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2112,8 +2155,10 @@ class MapsApi { /// Hide the info window for the marker with the given ID. Future hideInfoWindow(String markerId) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.hideInfoWindow$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.hideInfoWindow$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2136,8 +2181,10 @@ class MapsApi { /// Returns true if the marker with the given ID is currently displaying its /// info window. Future isInfoWindowShown(String markerId) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.isInfoWindowShown$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.isInfoWindowShown$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2168,8 +2215,10 @@ class MapsApi { /// If there was an error setting the style, such as an invalid style string, /// returns the error message. Future setStyle(String style) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.setStyle$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.setStyle$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2195,8 +2244,10 @@ class MapsApi { /// This allows checking asynchronously for initial style failures, as there /// is no way to return failures from map initialization. Future getLastStyleError() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getLastStyleError$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.getLastStyleError$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2218,14 +2269,16 @@ class MapsApi { /// Clears the cache of tiles previously requseted from the tile provider. Future clearTileCache(String tileOverlayId) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.clearTileCache$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.clearTileCache$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([tileOverlayId]) as List?; + final List? pigeonVar_replyList = await pigeonVar_channel + .send([tileOverlayId]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -2241,8 +2294,10 @@ class MapsApi { /// Takes a snapshot of the map and returns its image data. Future takeSnapshot() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.takeSnapshot$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.takeSnapshot$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2310,13 +2365,22 @@ abstract class MapsCallbackApi { void onPolylineTap(String polylineId); /// Called to get data for a map tile. - Future getTileOverlayTile(String tileOverlayId, PlatformPoint location, int zoom); - - static void setUp(MapsCallbackApi? api, {BinaryMessenger? binaryMessenger, String messageChannelSuffix = '',}) { - messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + Future getTileOverlayTile( + String tileOverlayId, PlatformPoint location, int zoom); + + static void setUp( + MapsCallbackApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraMoveStarted$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraMoveStarted$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); @@ -2327,24 +2391,29 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraMove$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraMove$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraMove was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraMove was null.'); final List args = (message as List?)!; - final PlatformCameraPosition? arg_cameraPosition = (args[0] as PlatformCameraPosition?); + final PlatformCameraPosition? arg_cameraPosition = + (args[0] as PlatformCameraPosition?); assert(arg_cameraPosition != null, 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraMove was null, expected non-null PlatformCameraPosition.'); try { @@ -2352,15 +2421,19 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraIdle$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCameraIdle$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); @@ -2371,22 +2444,26 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onTap$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onTap$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onTap was null.'); final List args = (message as List?)!; final PlatformLatLng? arg_position = (args[0] as PlatformLatLng?); assert(arg_position != null, @@ -2396,22 +2473,26 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onLongPress$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onLongPress$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onLongPress was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onLongPress was null.'); final List args = (message as List?)!; final PlatformLatLng? arg_position = (args[0] as PlatformLatLng?); assert(arg_position != null, @@ -2421,22 +2502,26 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerTap$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerTap$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerTap was null.'); final List args = (message as List?)!; final String? arg_markerId = (args[0] as String?); assert(arg_markerId != null, @@ -2446,22 +2531,26 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDragStart$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDragStart$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDragStart was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDragStart was null.'); final List args = (message as List?)!; final String? arg_markerId = (args[0] as String?); assert(arg_markerId != null, @@ -2474,22 +2563,26 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDrag$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDrag$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDrag was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDrag was null.'); final List args = (message as List?)!; final String? arg_markerId = (args[0] as String?); assert(arg_markerId != null, @@ -2502,22 +2595,26 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDragEnd$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDragEnd$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDragEnd was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onMarkerDragEnd was null.'); final List args = (message as List?)!; final String? arg_markerId = (args[0] as String?); assert(arg_markerId != null, @@ -2530,22 +2627,26 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onInfoWindowTap$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onInfoWindowTap$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onInfoWindowTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onInfoWindowTap was null.'); final List args = (message as List?)!; final String? arg_markerId = (args[0] as String?); assert(arg_markerId != null, @@ -2555,22 +2656,26 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCircleTap$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCircleTap$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCircleTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onCircleTap was null.'); final List args = (message as List?)!; final String? arg_circleId = (args[0] as String?); assert(arg_circleId != null, @@ -2580,22 +2685,26 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onClusterTap$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onClusterTap$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onClusterTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onClusterTap was null.'); final List args = (message as List?)!; final PlatformCluster? arg_cluster = (args[0] as PlatformCluster?); assert(arg_cluster != null, @@ -2605,22 +2714,26 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onPolygonTap$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onPolygonTap$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onPolygonTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onPolygonTap was null.'); final List args = (message as List?)!; final String? arg_polygonId = (args[0] as String?); assert(arg_polygonId != null, @@ -2630,22 +2743,26 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onPolylineTap$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onPolylineTap$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onPolylineTap was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.onPolylineTap was null.'); final List args = (message as List?)!; final String? arg_polylineId = (args[0] as String?); assert(arg_polylineId != null, @@ -2655,22 +2772,26 @@ abstract class MapsCallbackApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.getTileOverlayTile$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.getTileOverlayTile$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.getTileOverlayTile was null.'); + 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.getTileOverlayTile was null.'); final List args = (message as List?)!; final String? arg_tileOverlayId = (args[0] as String?); assert(arg_tileOverlayId != null, @@ -2682,12 +2803,14 @@ abstract class MapsCallbackApi { assert(arg_zoom != null, 'Argument for dev.flutter.pigeon.google_maps_flutter_ios.MapsCallbackApi.getTileOverlayTile was null, expected non-null int.'); try { - final PlatformTile output = await api.getTileOverlayTile(arg_tileOverlayId!, arg_location!, arg_zoom!); + final PlatformTile output = await api.getTileOverlayTile( + arg_tileOverlayId!, arg_location!, arg_zoom!); return wrapResponse(result: output); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } @@ -2702,9 +2825,11 @@ class MapsPlatformViewApi { /// Constructor for [MapsPlatformViewApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - MapsPlatformViewApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + MapsPlatformViewApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) : pigeonVar_binaryMessenger = binaryMessenger, - pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + pigeonVar_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; final BinaryMessenger? pigeonVar_binaryMessenger; static const MessageCodec pigeonChannelCodec = _PigeonCodec(); @@ -2712,8 +2837,10 @@ class MapsPlatformViewApi { final String pigeonVar_messageChannelSuffix; Future createView(PlatformMapViewCreationParams? type) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsPlatformViewApi.createView$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsPlatformViewApi.createView$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2739,9 +2866,11 @@ class MapsInspectorApi { /// Constructor for [MapsInspectorApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - MapsInspectorApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + MapsInspectorApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) : pigeonVar_binaryMessenger = binaryMessenger, - pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + pigeonVar_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; final BinaryMessenger? pigeonVar_binaryMessenger; static const MessageCodec pigeonChannelCodec = _PigeonCodec(); @@ -2749,8 +2878,10 @@ class MapsInspectorApi { final String pigeonVar_messageChannelSuffix; Future areBuildingsEnabled() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areBuildingsEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areBuildingsEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2776,8 +2907,10 @@ class MapsInspectorApi { } Future areRotateGesturesEnabled() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areRotateGesturesEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areRotateGesturesEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2803,8 +2936,10 @@ class MapsInspectorApi { } Future areScrollGesturesEnabled() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areScrollGesturesEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areScrollGesturesEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2830,8 +2965,10 @@ class MapsInspectorApi { } Future areTiltGesturesEnabled() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areTiltGesturesEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areTiltGesturesEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2857,8 +2994,10 @@ class MapsInspectorApi { } Future areZoomGesturesEnabled() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areZoomGesturesEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.areZoomGesturesEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2884,8 +3023,10 @@ class MapsInspectorApi { } Future isCompassEnabled() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.isCompassEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.isCompassEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2911,8 +3052,10 @@ class MapsInspectorApi { } Future isMyLocationButtonEnabled() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.isMyLocationButtonEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.isMyLocationButtonEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2938,8 +3081,10 @@ class MapsInspectorApi { } Future isTrafficEnabled() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.isTrafficEnabled$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.isTrafficEnabled$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -2965,14 +3110,16 @@ class MapsInspectorApi { } Future getTileOverlayInfo(String tileOverlayId) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.getTileOverlayInfo$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.getTileOverlayInfo$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([tileOverlayId]) as List?; + final List? pigeonVar_replyList = await pigeonVar_channel + .send([tileOverlayId]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -2987,8 +3134,10 @@ class MapsInspectorApi { } Future getHeatmapInfo(String heatmapId) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.getHeatmapInfo$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.getHeatmapInfo$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3009,8 +3158,10 @@ class MapsInspectorApi { } Future getZoomRange() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.getZoomRange$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.getZoomRange$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3036,14 +3187,16 @@ class MapsInspectorApi { } Future> getClusters(String clusterManagerId) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.getClusters$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.getClusters$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([clusterManagerId]) as List?; + final List? pigeonVar_replyList = await pigeonVar_channel + .send([clusterManagerId]) as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -3058,7 +3211,8 @@ class MapsInspectorApi { message: 'Host platform returned null value for non-null return value.', ); } else { - return (pigeonVar_replyList[0] as List?)!.cast(); + return (pigeonVar_replyList[0] as List?)! + .cast(); } } } @@ -3068,9 +3222,11 @@ class ImageRegistryApi { /// Constructor for [ImageRegistryApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - ImageRegistryApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + ImageRegistryApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) : pigeonVar_binaryMessenger = binaryMessenger, - pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + pigeonVar_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; final BinaryMessenger? pigeonVar_binaryMessenger; static const MessageCodec pigeonChannelCodec = _PigeonCodec(); @@ -3079,8 +3235,10 @@ class ImageRegistryApi { /// Adds a bitmap to the cache. Future addBitmapToCache(int id, PlatformBitmap bitmap) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.ImageRegistryApi.addBitmapToCache$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.ImageRegistryApi.addBitmapToCache$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3102,8 +3260,10 @@ class ImageRegistryApi { /// Retrieves a bitmap from the cache. Future removeBitmapFromCache(int id) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.ImageRegistryApi.removeBitmapFromCache$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.ImageRegistryApi.removeBitmapFromCache$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -3125,8 +3285,10 @@ class ImageRegistryApi { /// Clears the bitmap cache. Future clearBitmapCache() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.ImageRegistryApi.clearBitmapCache$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.ImageRegistryApi.clearBitmapCache$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, From c7518ee77c7a29d8809b5af3a1fc46e472b289b3 Mon Sep 17 00:00:00 2001 From: Alexander Troshkov <20989940+aednlaxer@users.noreply.github.com> Date: Fri, 7 Feb 2025 10:34:19 +0200 Subject: [PATCH 15/18] Rename PlatformBitmapRegisteredMapBitmap to PlatformRegisteredMapBitmap --- .../flutter/plugins/googlemaps/Convert.java | 8 +++---- .../flutter/plugins/googlemaps/Messages.java | 20 ++++++++-------- .../plugins/googlemaps/ConvertTest.java | 8 +++---- .../plugins/googlemaps/ImageRegistryTest.java | 4 ++-- .../lib/src/google_maps_flutter_android.dart | 2 +- .../lib/src/messages.g.dart | 12 +++++----- .../pigeons/messages.dart | 4 ++-- .../ios/Classes/GoogleMapMarkerController.m | 4 ++-- .../ios/Classes/messages.g.h | 4 ++-- .../ios/Classes/messages.g.m | 24 +++++++++---------- .../lib/src/google_maps_flutter_ios.dart | 2 +- .../lib/src/messages.g.dart | 12 +++++----- .../pigeons/messages.dart | 4 ++-- 13 files changed, 53 insertions(+), 55 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java index 56edd6227f7..5eaae40252f 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java @@ -119,9 +119,9 @@ public static BitmapDescriptor toBitmapDescriptor( Messages.PlatformBitmapBytesMap typedBitmap = (Messages.PlatformBitmapBytesMap) bitmap; return getBitmapFromBytes(typedBitmap, density, wrapper); } - if (bitmap instanceof Messages.PlatformBitmapRegisteredMapBitmap) { - Messages.PlatformBitmapRegisteredMapBitmap typedBitmap = - (Messages.PlatformBitmapRegisteredMapBitmap) bitmap; + if (bitmap instanceof Messages.PlatformRegisteredMapBitmap) { + Messages.PlatformRegisteredMapBitmap typedBitmap = + (Messages.PlatformRegisteredMapBitmap) bitmap; return getBitmapFromRegisteredBitmap(imageRegistry, typedBitmap); } throw new IllegalArgumentException("PlatformBitmap did not contain a supported subtype."); @@ -195,7 +195,7 @@ public static BitmapDescriptor getBitmapFromBytes( } public static BitmapDescriptor getBitmapFromRegisteredBitmap( - ImageRegistry imageRegistry, Messages.PlatformBitmapRegisteredMapBitmap registeredBitmap) { + ImageRegistry imageRegistry, Messages.PlatformRegisteredMapBitmap registeredBitmap) { return imageRegistry.getBitmap(registeredBitmap.getId()); } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Messages.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Messages.java index 757734e8247..2a8f83f3e0e 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Messages.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Messages.java @@ -5825,7 +5825,7 @@ ArrayList toList() { * *

Generated class from Pigeon that represents data sent in messages. */ - public static final class PlatformBitmapRegisteredMapBitmap { + public static final class PlatformRegisteredMapBitmap { private @NonNull Long id; public @NonNull Long getId() { @@ -5840,7 +5840,7 @@ public void setId(@NonNull Long setterArg) { } /** Constructor is non-public to enforce null safety; use Builder. */ - PlatformBitmapRegisteredMapBitmap() {} + PlatformRegisteredMapBitmap() {} @Override public boolean equals(Object o) { @@ -5850,7 +5850,7 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) { return false; } - PlatformBitmapRegisteredMapBitmap that = (PlatformBitmapRegisteredMapBitmap) o; + PlatformRegisteredMapBitmap that = (PlatformRegisteredMapBitmap) o; return id.equals(that.id); } @@ -5869,8 +5869,8 @@ public static final class Builder { return this; } - public @NonNull PlatformBitmapRegisteredMapBitmap build() { - PlatformBitmapRegisteredMapBitmap pigeonReturn = new PlatformBitmapRegisteredMapBitmap(); + public @NonNull PlatformRegisteredMapBitmap build() { + PlatformRegisteredMapBitmap pigeonReturn = new PlatformRegisteredMapBitmap(); pigeonReturn.setId(id); return pigeonReturn; } @@ -5883,9 +5883,9 @@ ArrayList toList() { return toListResult; } - static @NonNull PlatformBitmapRegisteredMapBitmap fromList( + static @NonNull PlatformRegisteredMapBitmap fromList( @NonNull ArrayList pigeonVar_list) { - PlatformBitmapRegisteredMapBitmap pigeonResult = new PlatformBitmapRegisteredMapBitmap(); + PlatformRegisteredMapBitmap pigeonResult = new PlatformRegisteredMapBitmap(); Object id = pigeonVar_list.get(0); pigeonResult.setId((Long) id); return pigeonResult; @@ -6015,7 +6015,7 @@ protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) { case (byte) 173: return PlatformBitmapBytesMap.fromList((ArrayList) readValue(buffer)); case (byte) 174: - return PlatformBitmapRegisteredMapBitmap.fromList((ArrayList) readValue(buffer)); + return PlatformRegisteredMapBitmap.fromList((ArrayList) readValue(buffer)); default: return super.readValueOfType(type, buffer); } @@ -6158,9 +6158,9 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { } else if (value instanceof PlatformBitmapBytesMap) { stream.write(173); writeValue(stream, ((PlatformBitmapBytesMap) value).toList()); - } else if (value instanceof PlatformBitmapRegisteredMapBitmap) { + } else if (value instanceof PlatformRegisteredMapBitmap) { stream.write(174); - writeValue(stream, ((PlatformBitmapRegisteredMapBitmap) value).toList()); + writeValue(stream, ((PlatformRegisteredMapBitmap) value).toList()); } else { super.writeValue(stream, value); } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ConvertTest.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ConvertTest.java index 924f3e7a0f6..d18253d4eb6 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ConvertTest.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ConvertTest.java @@ -341,8 +341,8 @@ public void GetBitmapFromNotRegisteredBitmap() { ImageRegistry imageRegistry = new ImageRegistry(assetManager, bitmapDescriptorFactoryWrapper, 1L); - Messages.PlatformBitmapRegisteredMapBitmap bitmap = - new Messages.PlatformBitmapRegisteredMapBitmap.Builder().setId(0L).build(); + Messages.PlatformRegisteredMapBitmap bitmap = + new Messages.PlatformRegisteredMapBitmap.Builder().setId(0L).build(); BitmapDescriptor result = Convert.getBitmapFromRegisteredBitmap(imageRegistry, bitmap); Assert.assertEquals(result, null); @@ -364,8 +364,8 @@ public void GetPreviouslyRegisteredBitmap() { when(bitmapDescriptorFactoryWrapper.fromBitmap(any())).thenReturn(mockBitmapDescriptor); imageRegistry.addBitmapToCache(0L, platformBitmap); - Messages.PlatformBitmapRegisteredMapBitmap registeredBitmap = - new Messages.PlatformBitmapRegisteredMapBitmap.Builder().setId(0L).build(); + Messages.PlatformRegisteredMapBitmap registeredBitmap = + new Messages.PlatformRegisteredMapBitmap.Builder().setId(0L).build(); when(bitmapDescriptorFactoryWrapper.fromBitmap(any())).thenReturn(mockBitmapDescriptor); BitmapDescriptor result = Convert.getBitmapFromRegisteredBitmap(imageRegistry, registeredBitmap); diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ImageRegistryTest.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ImageRegistryTest.java index 305f2164145..8542ebb7889 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ImageRegistryTest.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ImageRegistryTest.java @@ -187,8 +187,8 @@ public void GetBitmapReturnsRegisteredBitmap() { public void AddBitmapToCacheThrowsOnWrongBitmapType() { ImageRegistry imageRegistry = new ImageRegistry(assetManager, bitmapDescriptorFactoryWrapper, 1L); - Messages.PlatformBitmapRegisteredMapBitmap registeredMapBitmap = - new Messages.PlatformBitmapRegisteredMapBitmap.Builder().setId(0L).build(); + Messages.PlatformRegisteredMapBitmap registeredMapBitmap = + new Messages.PlatformRegisteredMapBitmap.Builder().setId(0L).build(); Messages.PlatformBitmap platformBitmap = new Messages.PlatformBitmap.Builder().setBitmap(registeredMapBitmap).build(); try { diff --git a/packages/google_maps_flutter/google_maps_flutter_android/lib/src/google_maps_flutter_android.dart b/packages/google_maps_flutter/google_maps_flutter_android/lib/src/google_maps_flutter_android.dart index 18bac11966f..63e9d80e0e4 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/lib/src/google_maps_flutter_android.dart +++ b/packages/google_maps_flutter/google_maps_flutter_android/lib/src/google_maps_flutter_android.dart @@ -944,7 +944,7 @@ class GoogleMapsFlutterAndroid extends GoogleMapsFlutterPlatform { height: bytes.height)); case final RegisteredMapBitmap registeredBitmap: return PlatformBitmap( - bitmap: PlatformBitmapRegisteredMapBitmap( + bitmap: PlatformRegisteredMapBitmap( id: registeredBitmap.id, ), ); diff --git a/packages/google_maps_flutter/google_maps_flutter_android/lib/src/messages.g.dart b/packages/google_maps_flutter/google_maps_flutter_android/lib/src/messages.g.dart index aa3eca910be..c09b09a06a8 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/lib/src/messages.g.dart +++ b/packages/google_maps_flutter/google_maps_flutter_android/lib/src/messages.g.dart @@ -1526,8 +1526,8 @@ class PlatformBitmapBytesMap { } /// Pigeon equivalent of a registered bitmap. -class PlatformBitmapRegisteredMapBitmap { - PlatformBitmapRegisteredMapBitmap({ +class PlatformRegisteredMapBitmap { + PlatformRegisteredMapBitmap({ required this.id, }); @@ -1539,9 +1539,9 @@ class PlatformBitmapRegisteredMapBitmap { ]; } - static PlatformBitmapRegisteredMapBitmap decode(Object result) { + static PlatformRegisteredMapBitmap decode(Object result) { result as List; - return PlatformBitmapRegisteredMapBitmap( + return PlatformRegisteredMapBitmap( id: result[0]! as int, ); } @@ -1689,7 +1689,7 @@ class _PigeonCodec extends StandardMessageCodec { } else if (value is PlatformBitmapBytesMap) { buffer.putUint8(173); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapRegisteredMapBitmap) { + } else if (value is PlatformRegisteredMapBitmap) { buffer.putUint8(174); writeValue(buffer, value.encode()); } else { @@ -1797,7 +1797,7 @@ class _PigeonCodec extends StandardMessageCodec { case 173: return PlatformBitmapBytesMap.decode(readValue(buffer)!); case 174: - return PlatformBitmapRegisteredMapBitmap.decode(readValue(buffer)!); + return PlatformRegisteredMapBitmap.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/pigeons/messages.dart b/packages/google_maps_flutter/google_maps_flutter_android/pigeons/messages.dart index 2e6cd323bf1..1b6b7687f03 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/pigeons/messages.dart +++ b/packages/google_maps_flutter/google_maps_flutter_android/pigeons/messages.dart @@ -589,8 +589,8 @@ class PlatformBitmapBytesMap { } /// Pigeon equivalent of a registered bitmap. -class PlatformBitmapRegisteredMapBitmap { - PlatformBitmapRegisteredMapBitmap({ +class PlatformRegisteredMapBitmap { + PlatformRegisteredMapBitmap({ required this.id, }); diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.m index ced97d529e5..2ce3c1a5353 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.m @@ -151,8 +151,8 @@ + (UIImage *)iconFromBitmap:(FGMPlatformBitmap *)platformBitmap // https://github.com/flutter/flutter/issues/117819. id bitmap = platformBitmap.bitmap; UIImage *image; - if ([bitmap isKindOfClass:[FGMPlatformBitmapRegisteredMapBitmap class]]) { - FGMPlatformBitmapRegisteredMapBitmap *registeredBitmap = bitmap; + if ([bitmap isKindOfClass:[FGMPlatformRegisteredMapBitmap class]]) { + FGMPlatformRegisteredMapBitmap *registeredBitmap = bitmap; NSInteger imageId = registeredBitmap.id; NSNumber *imageIdNumber = [NSNumber numberWithInteger:imageId]; image = [imageRegistry getBitmap:imageIdNumber]; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.h b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.h index 39f0c0db379..cc14ccba46e 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.h +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.h @@ -104,7 +104,7 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { @class FGMPlatformBitmapAssetImage; @class FGMPlatformBitmapAssetMap; @class FGMPlatformBitmapBytesMap; -@class FGMPlatformBitmapRegisteredMapBitmap; +@class FGMPlatformRegisteredMapBitmap; /// Pigeon representatation of a CameraPosition. @interface FGMPlatformCameraPosition : NSObject @@ -622,7 +622,7 @@ typedef NS_ENUM(NSUInteger, FGMPlatformMapBitmapScaling) { @end /// Pigeon equivalent of a registered bitmap. -@interface FGMPlatformBitmapRegisteredMapBitmap : NSObject +@interface FGMPlatformRegisteredMapBitmap : NSObject /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithId:(NSInteger)id; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.m index 44d22096ad1..45005a60fb0 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.m @@ -311,9 +311,9 @@ + (nullable FGMPlatformBitmapBytesMap *)nullableFromList:(NSArray *)list; - (NSArray *)toList; @end -@interface FGMPlatformBitmapRegisteredMapBitmap () -+ (FGMPlatformBitmapRegisteredMapBitmap *)fromList:(NSArray *)list; -+ (nullable FGMPlatformBitmapRegisteredMapBitmap *)nullableFromList:(NSArray *)list; +@interface FGMPlatformRegisteredMapBitmap () ++ (FGMPlatformRegisteredMapBitmap *)fromList:(NSArray *)list; ++ (nullable FGMPlatformRegisteredMapBitmap *)nullableFromList:(NSArray *)list; - (NSArray *)toList; @end @@ -1539,21 +1539,19 @@ + (nullable FGMPlatformBitmapBytesMap *)nullableFromList:(NSArray *)list { } @end -@implementation FGMPlatformBitmapRegisteredMapBitmap +@implementation FGMPlatformRegisteredMapBitmap + (instancetype)makeWithId:(NSInteger)id { - FGMPlatformBitmapRegisteredMapBitmap *pigeonResult = - [[FGMPlatformBitmapRegisteredMapBitmap alloc] init]; + FGMPlatformRegisteredMapBitmap *pigeonResult = [[FGMPlatformRegisteredMapBitmap alloc] init]; pigeonResult.id = id; return pigeonResult; } -+ (FGMPlatformBitmapRegisteredMapBitmap *)fromList:(NSArray *)list { - FGMPlatformBitmapRegisteredMapBitmap *pigeonResult = - [[FGMPlatformBitmapRegisteredMapBitmap alloc] init]; ++ (FGMPlatformRegisteredMapBitmap *)fromList:(NSArray *)list { + FGMPlatformRegisteredMapBitmap *pigeonResult = [[FGMPlatformRegisteredMapBitmap alloc] init]; pigeonResult.id = [GetNullableObjectAtIndex(list, 0) integerValue]; return pigeonResult; } -+ (nullable FGMPlatformBitmapRegisteredMapBitmap *)nullableFromList:(NSArray *)list { - return (list) ? [FGMPlatformBitmapRegisteredMapBitmap fromList:list] : nil; ++ (nullable FGMPlatformRegisteredMapBitmap *)nullableFromList:(NSArray *)list { + return (list) ? [FGMPlatformRegisteredMapBitmap fromList:list] : nil; } - (NSArray *)toList { return @[ @@ -1668,7 +1666,7 @@ - (nullable id)readValueOfType:(UInt8)type { case 170: return [FGMPlatformBitmapBytesMap fromList:[self readValue]]; case 171: - return [FGMPlatformBitmapRegisteredMapBitmap fromList:[self readValue]]; + return [FGMPlatformRegisteredMapBitmap fromList:[self readValue]]; default: return [super readValueOfType:type]; } @@ -1809,7 +1807,7 @@ - (void)writeValue:(id)value { } else if ([value isKindOfClass:[FGMPlatformBitmapBytesMap class]]) { [self writeByte:170]; [self writeValue:[value toList]]; - } else if ([value isKindOfClass:[FGMPlatformBitmapRegisteredMapBitmap class]]) { + } else if ([value isKindOfClass:[FGMPlatformRegisteredMapBitmap class]]) { [self writeByte:171]; [self writeValue:[value toList]]; } else { diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/google_maps_flutter_ios.dart b/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/google_maps_flutter_ios.dart index 35b1926d468..9ee480109b9 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/google_maps_flutter_ios.dart +++ b/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/google_maps_flutter_ios.dart @@ -830,7 +830,7 @@ class GoogleMapsFlutterIOS extends GoogleMapsFlutterPlatform { height: bytes.height)); case final RegisteredMapBitmap registeredBitmap: return PlatformBitmap( - bitmap: PlatformBitmapRegisteredMapBitmap(id: registeredBitmap.id), + bitmap: PlatformRegisteredMapBitmap(id: registeredBitmap.id), ); default: throw ArgumentError( diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/messages.g.dart b/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/messages.g.dart index be26c1ce90d..aa43201493f 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/messages.g.dart +++ b/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/messages.g.dart @@ -1443,8 +1443,8 @@ class PlatformBitmapBytesMap { } /// Pigeon equivalent of a registered bitmap. -class PlatformBitmapRegisteredMapBitmap { - PlatformBitmapRegisteredMapBitmap({ +class PlatformRegisteredMapBitmap { + PlatformRegisteredMapBitmap({ required this.id, }); @@ -1456,9 +1456,9 @@ class PlatformBitmapRegisteredMapBitmap { ]; } - static PlatformBitmapRegisteredMapBitmap decode(Object result) { + static PlatformRegisteredMapBitmap decode(Object result) { result as List; - return PlatformBitmapRegisteredMapBitmap( + return PlatformRegisteredMapBitmap( id: result[0]! as int, ); } @@ -1597,7 +1597,7 @@ class _PigeonCodec extends StandardMessageCodec { } else if (value is PlatformBitmapBytesMap) { buffer.putUint8(170); writeValue(buffer, value.encode()); - } else if (value is PlatformBitmapRegisteredMapBitmap) { + } else if (value is PlatformRegisteredMapBitmap) { buffer.putUint8(171); writeValue(buffer, value.encode()); } else { @@ -1697,7 +1697,7 @@ class _PigeonCodec extends StandardMessageCodec { case 170: return PlatformBitmapBytesMap.decode(readValue(buffer)!); case 171: - return PlatformBitmapRegisteredMapBitmap.decode(readValue(buffer)!); + return PlatformRegisteredMapBitmap.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); } diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/pigeons/messages.dart b/packages/google_maps_flutter/google_maps_flutter_ios/pigeons/messages.dart index 9d1a3c9742d..4927c8ba044 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/pigeons/messages.dart +++ b/packages/google_maps_flutter/google_maps_flutter_ios/pigeons/messages.dart @@ -541,8 +541,8 @@ class PlatformBitmapBytesMap { } /// Pigeon equivalent of a registered bitmap. -class PlatformBitmapRegisteredMapBitmap { - PlatformBitmapRegisteredMapBitmap({ +class PlatformRegisteredMapBitmap { + PlatformRegisteredMapBitmap({ required this.id, }); From bd53fba6b1ca1b84769686c923e1fc48a48e084d Mon Sep 17 00:00:00 2001 From: Alexander Troshkov <20989940+aednlaxer@users.noreply.github.com> Date: Fri, 7 Feb 2025 14:11:28 +0200 Subject: [PATCH 16/18] Fix tests --- .../example/lib/bitmap_registry.dart | 6 +- .../flutter/plugins/googlemaps/Convert.java | 36 ++++++++-- .../plugins/googlemaps/ImageRegistry.java | 28 ++++++-- .../flutter/plugins/googlemaps/Messages.java | 2 +- .../plugins/googlemaps/ConvertTest.java | 39 +++++++++- .../plugins/googlemaps/ImageRegistryTest.java | 71 +++++++++++++++++-- .../googlemaps/PolylineControllerTest.java | 3 + .../legacy_renderer_test.dart | 2 + .../example/lib/bitmap_registry.dart | 8 +-- .../lib/src/messages.g.dart | 2 +- .../pigeons/messages.dart | 2 +- .../lib/bitmap_registry.dart | 8 +-- .../ios/Classes/messages.g.h | 2 +- .../ios/Classes/messages.g.m | 2 +- .../lib/src/messages.g.dart | 2 +- .../pigeons/messages.dart | 2 +- 16 files changed, 178 insertions(+), 37 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter/example/lib/bitmap_registry.dart b/packages/google_maps_flutter/google_maps_flutter/example/lib/bitmap_registry.dart index 32f6eff1f42..cb81ed77aad 100644 --- a/packages/google_maps_flutter/google_maps_flutter/example/lib/bitmap_registry.dart +++ b/packages/google_maps_flutter/google_maps_flutter/example/lib/bitmap_registry.dart @@ -107,7 +107,7 @@ class _BitmapRegistryBodyState extends State<_BitmapRegistryBody> { } final BytesMapBitmap bitmap = await _getAssetBitmapDescriptor(); - final int registeredBitmapId = + _registeredBitmapId = await GoogleMapBitmapRegistry.instance.register(bitmap); // If the widget was disposed before the bitmap was registered, unregister @@ -117,9 +117,7 @@ class _BitmapRegistryBodyState extends State<_BitmapRegistryBody> { return; } - setState(() { - _registeredBitmapId = registeredBitmapId; - }); + setState(() {}); } /// Unregister the bitmap from the bitmap registry. diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java index 5eaae40252f..7a274eac78b 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java @@ -60,21 +60,40 @@ class Convert { public static final String HEATMAP_GRADIENT_START_POINTS_KEY = "startPoints"; public static final String HEATMAP_GRADIENT_COLOR_MAP_SIZE_KEY = "colorMapSize"; - public static BitmapDescriptor toBitmapDescriptor( + private static BitmapDescriptor toBitmapDescriptor( Messages.PlatformBitmap platformBitmap, AssetManager assetManager, float density, ImageRegistry imageRegistry) { return toBitmapDescriptor( - platformBitmap, assetManager, density, new BitmapDescriptorFactoryWrapper(), imageRegistry); + platformBitmap, + assetManager, + density, + new BitmapDescriptorFactoryWrapper(), + imageRegistry, + null); } + /** + * Creates BitmapDescriptor object from Messages.PlatformBitmap data. + * + * @param platformBitmap a PlatformBitmap containing the bitmap data from which to construct a + * BitmapDescriptor. + * @param assetManager An instance of Android's AssetManager which provides access to any raw + * asset files stored in the application's assets directory. + * @param density the density of the display, used to calculate pixel dimensions. + * @param wrapper is an instance of the BitmapDescriptorFactoryWrapper. + * @param imageRegistry An instance of the ImageRegistry class. + * @param flutterInjectorWrapper An instance of the FlutterInjectorWrapper class. + * @return BitmapDescriptor object created from Messages.PlatformBitmap data. + */ public static BitmapDescriptor toBitmapDescriptor( Messages.PlatformBitmap platformBitmap, AssetManager assetManager, float density, BitmapDescriptorFactoryWrapper wrapper, - ImageRegistry imageRegistry) { + ImageRegistry imageRegistry, + @Nullable FlutterInjectorWrapper flutterInjectorWrapper) { Object bitmap = platformBitmap.getBitmap(); if (bitmap instanceof Messages.PlatformBitmapDefaultMarker) { Messages.PlatformBitmapDefaultMarker typedBitmap = @@ -113,7 +132,11 @@ public static BitmapDescriptor toBitmapDescriptor( if (bitmap instanceof Messages.PlatformBitmapAssetMap) { Messages.PlatformBitmapAssetMap typedBitmap = (Messages.PlatformBitmapAssetMap) bitmap; return getBitmapFromAsset( - typedBitmap, assetManager, density, wrapper, new FlutterInjectorWrapper()); + typedBitmap, + assetManager, + density, + wrapper, + flutterInjectorWrapper != null ? flutterInjectorWrapper : new FlutterInjectorWrapper()); } if (bitmap instanceof Messages.PlatformBitmapBytesMap) { Messages.PlatformBitmapBytesMap typedBitmap = (Messages.PlatformBitmapBytesMap) bitmap; @@ -610,7 +633,7 @@ static void interpretMarkerOptions( sink.setDraggable(marker.getDraggable()); sink.setFlat(marker.getFlat()); sink.setIcon( - toBitmapDescriptor(marker.getIcon(), assetManager, density, wrapper, imageRegistry)); + toBitmapDescriptor(marker.getIcon(), assetManager, density, wrapper, imageRegistry, null)); interpretInfoWindowOptions(sink, marker.getInfoWindow()); sink.setPosition(toLatLng(marker.getPosition().toList())); sink.setRotation(marker.getRotation().floatValue()); @@ -833,7 +856,8 @@ private static List patternFromPigeon( return pattern; } - private static Cap capFromPigeon( + @VisibleForTesting + public static Cap capFromPigeon( Messages.PlatformCap cap, AssetManager assetManager, ImageRegistry imageRegistry, diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java index a2b66e5a325..0ab27bf5e09 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java @@ -2,16 +2,26 @@ import android.content.res.AssetManager; import androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; import com.google.android.gms.maps.model.BitmapDescriptor; import io.flutter.plugins.googlemaps.Convert.BitmapDescriptorFactoryWrapper; +import io.flutter.plugins.googlemaps.Convert.FlutterInjectorWrapper; import io.flutter.plugins.googlemaps.Messages.ImageRegistryApi; import io.flutter.plugins.googlemaps.Messages.PlatformBitmap; import java.util.HashMap; +/** + * A registry for BitmapDescriptors. + * + *

BitmapDescriptors are created from PlatformBitmaps and stored in the registry. The registry + * allows for the retrieval of BitmapDescriptors by their unique identifier. + */ class ImageRegistry implements ImageRegistryApi { - final AssetManager assetManager; - final BitmapDescriptorFactoryWrapper bitmapDescriptorFactoryWrapper; - final float density; + private final AssetManager assetManager; + private final BitmapDescriptorFactoryWrapper bitmapDescriptorFactoryWrapper; + private final float density; + + @VisibleForTesting private FlutterInjectorWrapper flutterInjectorWrapper; private final HashMap registry = new HashMap<>(); @@ -34,10 +44,20 @@ public void addBitmapToCache(@NonNull Long id, PlatformBitmap bitmap) { final BitmapDescriptor bitmapDescriptor = Convert.toBitmapDescriptor( - bitmap, assetManager, density, bitmapDescriptorFactoryWrapper, this); + bitmap, + assetManager, + density, + bitmapDescriptorFactoryWrapper, + this, + flutterInjectorWrapper); registry.put(id, bitmapDescriptor); } + @VisibleForTesting + public void setFlutterInjectorWrapper(FlutterInjectorWrapper flutterInjectorWrapper) { + this.flutterInjectorWrapper = flutterInjectorWrapper; + } + @Override public void removeBitmapFromCache(@NonNull Long id) { registry.remove(id); diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Messages.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Messages.java index 2a8f83f3e0e..bd616b0c32a 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Messages.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Messages.java @@ -7792,7 +7792,7 @@ static void setUp( public interface ImageRegistryApi { /** Adds a bitmap to the cache. */ void addBitmapToCache(@NonNull Long id, @NonNull PlatformBitmap bitmap); - /** Retrieves a bitmap from the cache. */ + /** Removes a bitmap from the cache. */ void removeBitmapFromCache(@NonNull Long id); /** Clears the bitmap cache. */ void clearBitmapCache(); diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ConvertTest.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ConvertTest.java index d18253d4eb6..8b32e3a84ff 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ConvertTest.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ConvertTest.java @@ -31,6 +31,8 @@ import android.util.Base64; import androidx.annotation.NonNull; import com.google.android.gms.maps.model.BitmapDescriptor; +import com.google.android.gms.maps.model.Cap; +import com.google.android.gms.maps.model.CustomCap; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.LatLngBounds; import com.google.maps.android.clustering.algo.StaticCluster; @@ -41,6 +43,8 @@ import io.flutter.plugins.googlemaps.Convert.BitmapDescriptorFactoryWrapper; import io.flutter.plugins.googlemaps.Convert.FlutterInjectorWrapper; import io.flutter.plugins.googlemaps.Messages.PlatformBitmap; +import io.flutter.plugins.googlemaps.Messages.PlatformCap; +import io.flutter.plugins.googlemaps.Messages.PlatformCapType; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; @@ -345,7 +349,7 @@ public void GetBitmapFromNotRegisteredBitmap() { new Messages.PlatformRegisteredMapBitmap.Builder().setId(0L).build(); BitmapDescriptor result = Convert.getBitmapFromRegisteredBitmap(imageRegistry, bitmap); - Assert.assertEquals(result, null); + Assert.assertNull(result); } @Test @@ -703,6 +707,39 @@ public void ConvertInterpretHeatmapOptionsReturnsCorrectData() { Assert.assertEquals(idData, id); } + @Test + public void capFromPigeonCreatesCustomCapWithRegisteredBitmap() { + final ImageRegistry imageRegistry = + new ImageRegistry(assetManager, bitmapDescriptorFactoryWrapper, 1f); + + byte[] bmpData = Base64.decode(base64Image, Base64.DEFAULT); + Messages.PlatformBitmapBytesMap bitmap = + new Messages.PlatformBitmapBytesMap.Builder() + .setBitmapScaling(Messages.PlatformMapBitmapScaling.NONE) + .setImagePixelRatio(2.0) + .setByteData(bmpData) + .build(); + PlatformBitmap platformBitmap = new PlatformBitmap.Builder().setBitmap(bitmap).build(); + + when(bitmapDescriptorFactoryWrapper.fromBitmap(any())).thenReturn(mockBitmapDescriptor); + imageRegistry.addBitmapToCache(1L, platformBitmap); + Messages.PlatformRegisteredMapBitmap registeredBitmap = + new Messages.PlatformRegisteredMapBitmap.Builder().setId(1L).build(); + + PlatformBitmap platformRegisteredBitmap = + new PlatformBitmap.Builder().setBitmap(registeredBitmap).build(); + final PlatformCap platformCap = + new PlatformCap.Builder() + .setRefWidth(2d) + .setType(PlatformCapType.CUSTOM_CAP) + .setBitmapDescriptor(platformRegisteredBitmap) + .build(); + + final Cap cap = Convert.capFromPigeon(platformCap, assetManager, imageRegistry, 1f); + Assert.assertEquals(cap.getClass(), CustomCap.class); + Assert.assertEquals(((CustomCap) cap).bitmapDescriptor, mockBitmapDescriptor); + } + private InputStream buildImageInputStream() { Bitmap fakeBitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ImageRegistryTest.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ImageRegistryTest.java index 8542ebb7889..d532e98b693 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ImageRegistryTest.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ImageRegistryTest.java @@ -14,7 +14,9 @@ import com.google.android.gms.maps.model.BitmapDescriptor; import io.flutter.plugins.googlemaps.Convert.BitmapDescriptorFactoryWrapper; import io.flutter.plugins.googlemaps.Convert.FlutterInjectorWrapper; +import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.InputStream; import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -52,7 +54,7 @@ public void tearDown() throws Exception { } @Test - public void AddBitmapToCacheRegistersABitmap() { + public void AddBitmapToCacheRegistersNewBitmap() { final ImageRegistry imageRegistry = new ImageRegistry(assetManager, bitmapDescriptorFactoryWrapper, 1L); Assert.assertNull(imageRegistry.getBitmap(1L)); @@ -73,6 +75,35 @@ public void AddBitmapToCacheRegistersABitmap() { Assert.assertEquals(imageRegistry.getBitmap(1L), mockBitmapDescriptor); } + @Test + public void AddBitmapToCacheRegistersNewBitmapFromAssets() throws Exception { + String fakeAssetName = "fake_asset_name"; + String fakeAssetKey = "fake_asset_key"; + + final ImageRegistry imageRegistry = + new ImageRegistry(assetManager, bitmapDescriptorFactoryWrapper, 1L); + Assert.assertNull(imageRegistry.getBitmap(1L)); + + Messages.PlatformBitmapAssetMap bitmap = + new Messages.PlatformBitmapAssetMap.Builder() + .setBitmapScaling(Messages.PlatformMapBitmapScaling.AUTO) + .setWidth(15.0) + .setHeight(15.0) + .setImagePixelRatio(2.0) + .setAssetName(fakeAssetName) + .build(); + Messages.PlatformBitmap platformBitmap = + new Messages.PlatformBitmap.Builder().setBitmap(bitmap).build(); + + when(flutterInjectorWrapper.getLookupKeyForAsset(fakeAssetName)).thenReturn(fakeAssetKey); + when(assetManager.open(fakeAssetKey)).thenReturn(buildImageInputStream()); + when(bitmapDescriptorFactoryWrapper.fromBitmap(any())).thenReturn(mockBitmapDescriptor); + imageRegistry.setFlutterInjectorWrapper(flutterInjectorWrapper); + + imageRegistry.addBitmapToCache(1L, platformBitmap); + Assert.assertEquals(imageRegistry.getBitmap(1L), mockBitmapDescriptor); + } + @Test public void AddBitmapToCacheReplacesExistingBitmap() { final ImageRegistry imageRegistry = @@ -111,21 +142,39 @@ public void AddBitmapToCacheReplacesExistingBitmap() { public void RemoveBitmapFromCacheRemovesBitmap() { final ImageRegistry imageRegistry = new ImageRegistry(assetManager, bitmapDescriptorFactoryWrapper, 1L); - byte[] bmpData = Base64.decode(generateBase64Image(Color.BLACK), Base64.DEFAULT); - Messages.PlatformBitmapBytesMap bitmap = + + byte[] bmpData1 = Base64.decode(generateBase64Image(Color.BLACK), Base64.DEFAULT); + Messages.PlatformBitmapBytesMap bitmap1 = new Messages.PlatformBitmapBytesMap.Builder() .setBitmapScaling(Messages.PlatformMapBitmapScaling.AUTO) .setImagePixelRatio(2.0) - .setByteData(bmpData) + .setByteData(bmpData1) .build(); - Messages.PlatformBitmap platformBitmap = - new Messages.PlatformBitmap.Builder().setBitmap(bitmap).build(); + Messages.PlatformBitmap platformBitmap1 = + new Messages.PlatformBitmap.Builder().setBitmap(bitmap1).build(); + + byte[] bmpData2 = Base64.decode(generateBase64Image(Color.BLACK), Base64.DEFAULT); + Messages.PlatformBitmapBytesMap bitmap2 = + new Messages.PlatformBitmapBytesMap.Builder() + .setBitmapScaling(Messages.PlatformMapBitmapScaling.AUTO) + .setImagePixelRatio(2.0) + .setByteData(bmpData1) + .build(); + Messages.PlatformBitmap platformBitmap2 = + new Messages.PlatformBitmap.Builder().setBitmap(bitmap2).build(); + when(bitmapDescriptorFactoryWrapper.fromBitmap(any())).thenReturn(mockBitmapDescriptor); - imageRegistry.addBitmapToCache(1L, platformBitmap); + imageRegistry.addBitmapToCache(1L, platformBitmap1); + + when(bitmapDescriptorFactoryWrapper.fromBitmap(any())).thenReturn(mockBitmapDescriptor2); + imageRegistry.addBitmapToCache(2L, platformBitmap2); + Assert.assertEquals(imageRegistry.getBitmap(1L), mockBitmapDescriptor); + Assert.assertEquals(imageRegistry.getBitmap(2L), mockBitmapDescriptor2); imageRegistry.removeBitmapFromCache(1L); Assert.assertNull(imageRegistry.getBitmap(1L)); + Assert.assertEquals(imageRegistry.getBitmap(2L), mockBitmapDescriptor2); } @Test @@ -221,4 +270,12 @@ private String generateBase64Image(int color) { // Encode the PNG bytes as a base64 string return Base64.encodeToString(pngBytes, Base64.DEFAULT); } + + private InputStream buildImageInputStream() { + Bitmap fakeBitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + fakeBitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream); + byte[] byteArray = byteArrayOutputStream.toByteArray(); + return new ByteArrayInputStream(byteArray); + } } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/PolylineControllerTest.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/PolylineControllerTest.java index 695f9a4e449..83a1c1f89a9 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/PolylineControllerTest.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/PolylineControllerTest.java @@ -26,4 +26,7 @@ public void controller_SetsStrokeDensity() { Mockito.verify(polyline).setWidth(density * strokeWidth); } + + @Test + public void controller_addPolylineWithRegisteredBitmap() {} } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/integration_test/legacy_renderer_test.dart b/packages/google_maps_flutter/google_maps_flutter_android/example/integration_test/legacy_renderer_test.dart index 95b1134d566..782cc3a271e 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/example/integration_test/legacy_renderer_test.dart +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/integration_test/legacy_renderer_test.dart @@ -8,6 +8,7 @@ import 'package:google_maps_flutter_android/google_maps_flutter_android.dart'; import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; import 'package:integration_test/integration_test.dart'; +import 'bitmap_registry_tests.dart'; import 'google_maps_tests.dart' show googleMapsTests; void main() { @@ -37,4 +38,5 @@ void main() { // Run tests. googleMapsTests(); + bitmapRegistryTests(); } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/lib/bitmap_registry.dart b/packages/google_maps_flutter/google_maps_flutter_android/example/lib/bitmap_registry.dart index aebf78fbf47..88ee4549bc9 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/example/lib/bitmap_registry.dart +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/lib/bitmap_registry.dart @@ -108,7 +108,9 @@ class _BitmapRegistryBodyState extends State<_BitmapRegistryBody> { final BytesMapBitmap bitmap = await _getAssetBitmapDescriptor(); const int registeredBitmapId = 1; - await GoogleMapsFlutterPlatform.instance.registerBitmap(1, bitmap); + await GoogleMapsFlutterPlatform.instance + .registerBitmap(registeredBitmapId, bitmap); + _registeredBitmapId = registeredBitmapId; // If the widget was disposed before the bitmap was registered, unregister // the bitmap. @@ -117,9 +119,7 @@ class _BitmapRegistryBodyState extends State<_BitmapRegistryBody> { return; } - setState(() { - _registeredBitmapId = registeredBitmapId; - }); + setState(() {}); } /// Unregister the bitmap from the bitmap registry. diff --git a/packages/google_maps_flutter/google_maps_flutter_android/lib/src/messages.g.dart b/packages/google_maps_flutter/google_maps_flutter_android/lib/src/messages.g.dart index c09b09a06a8..f0ed0db9f84 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/lib/src/messages.g.dart +++ b/packages/google_maps_flutter/google_maps_flutter_android/lib/src/messages.g.dart @@ -3483,7 +3483,7 @@ class ImageRegistryApi { } } - /// Retrieves a bitmap from the cache. + /// Removes a bitmap from the cache. Future removeBitmapFromCache(int id) async { final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_android.ImageRegistryApi.removeBitmapFromCache$pigeonVar_messageChannelSuffix'; diff --git a/packages/google_maps_flutter/google_maps_flutter_android/pigeons/messages.dart b/packages/google_maps_flutter/google_maps_flutter_android/pigeons/messages.dart index 1b6b7687f03..ce8945f2962 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/pigeons/messages.dart +++ b/packages/google_maps_flutter/google_maps_flutter_android/pigeons/messages.dart @@ -789,7 +789,7 @@ abstract class ImageRegistryApi { /// Adds a bitmap to the cache. void addBitmapToCache(int id, PlatformBitmap bitmap); - /// Retrieves a bitmap from the cache. + /// Removes a bitmap from the cache. void removeBitmapFromCache(int id); /// Clears the bitmap cache. diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/shared/maps_example_dart/lib/bitmap_registry.dart b/packages/google_maps_flutter/google_maps_flutter_ios/example/shared/maps_example_dart/lib/bitmap_registry.dart index aebf78fbf47..88ee4549bc9 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/shared/maps_example_dart/lib/bitmap_registry.dart +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/shared/maps_example_dart/lib/bitmap_registry.dart @@ -108,7 +108,9 @@ class _BitmapRegistryBodyState extends State<_BitmapRegistryBody> { final BytesMapBitmap bitmap = await _getAssetBitmapDescriptor(); const int registeredBitmapId = 1; - await GoogleMapsFlutterPlatform.instance.registerBitmap(1, bitmap); + await GoogleMapsFlutterPlatform.instance + .registerBitmap(registeredBitmapId, bitmap); + _registeredBitmapId = registeredBitmapId; // If the widget was disposed before the bitmap was registered, unregister // the bitmap. @@ -117,9 +119,7 @@ class _BitmapRegistryBodyState extends State<_BitmapRegistryBody> { return; } - setState(() { - _registeredBitmapId = registeredBitmapId; - }); + setState(() {}); } /// Unregister the bitmap from the bitmap registry. diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.h b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.h index cc14ccba46e..da317643f51 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.h +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.h @@ -858,7 +858,7 @@ extern void SetUpFGMMapsInspectorApiWithSuffix(id binary - (void)addBitmapToCacheId:(NSInteger)id bitmap:(FGMPlatformBitmap *)bitmap error:(FlutterError *_Nullable *_Nonnull)error; -/// Retrieves a bitmap from the cache. +/// Removes a bitmap from the cache. - (void)removeBitmapFromCacheId:(NSInteger)id error:(FlutterError *_Nullable *_Nonnull)error; /// Clears the bitmap cache. - (void)clearBitmapCacheWithError:(FlutterError *_Nullable *_Nonnull)error; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.m index 45005a60fb0..53347bbb340 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.m @@ -3191,7 +3191,7 @@ void SetUpFGMImageRegistryApiWithSuffix(id binaryMesseng [channel setMessageHandler:nil]; } } - /// Retrieves a bitmap from the cache. + /// Removes a bitmap from the cache. { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] initWithName:[NSString stringWithFormat:@"%@%@", diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/messages.g.dart b/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/messages.g.dart index aa43201493f..297d7e0df5a 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/messages.g.dart +++ b/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/messages.g.dart @@ -3258,7 +3258,7 @@ class ImageRegistryApi { } } - /// Retrieves a bitmap from the cache. + /// Removes a bitmap from the cache. Future removeBitmapFromCache(int id) async { final String pigeonVar_channelName = 'dev.flutter.pigeon.google_maps_flutter_ios.ImageRegistryApi.removeBitmapFromCache$pigeonVar_messageChannelSuffix'; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/pigeons/messages.dart b/packages/google_maps_flutter/google_maps_flutter_ios/pigeons/messages.dart index 4927c8ba044..d7eadc4cad6 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/pigeons/messages.dart +++ b/packages/google_maps_flutter/google_maps_flutter_ios/pigeons/messages.dart @@ -769,7 +769,7 @@ abstract class ImageRegistryApi { /// Adds a bitmap to the cache. void addBitmapToCache(int id, PlatformBitmap bitmap); - /// Retrieves a bitmap from the cache. + /// Removes a bitmap from the cache. void removeBitmapFromCache(int id); /// Clears the bitmap cache. From 9799b6a78c227ce6d8de9d2da10143cf716c56f7 Mon Sep 17 00:00:00 2001 From: Alexander Troshkov <20989940+aednlaxer@users.noreply.github.com> Date: Fri, 7 Feb 2025 15:36:59 +0200 Subject: [PATCH 17/18] Add doc for getBitmap --- .../java/io/flutter/plugins/googlemaps/ImageRegistry.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java index 0ab27bf5e09..43f03fd0d77 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java @@ -68,6 +68,13 @@ public void clearBitmapCache() { registry.clear(); } + + /** + * Retrieves a BitmapDescriptor from the registry using the provided ID. + * + * @param id unique identifier of a previously registered BitmapDescriptor. + * @return the BitmapDescriptor associated with the given ID, or null if no such object exists. + */ public BitmapDescriptor getBitmap(Long id) { return registry.get(id); } From dcf387642ab597ea17744c0f22975db4b7f25c9d Mon Sep 17 00:00:00 2001 From: Alexander Troshkov <20989940+aednlaxer@users.noreply.github.com> Date: Fri, 14 Feb 2025 11:18:43 +0200 Subject: [PATCH 18/18] Add hasRegisteredMapBitmap method to maps inspector --- .../googlemaps/GoogleMapController.java | 6 ++ .../plugins/googlemaps/ImageRegistry.java | 1 - .../flutter/plugins/googlemaps/Messages.java | 28 +++++++ .../bitmap_registry_tests.dart | 64 ++++++++++++++++ .../lib/src/google_map_inspector_android.dart | 8 ++ .../lib/src/messages.g.dart | 29 ++++++++ .../pigeons/messages.dart | 1 + .../bitmap_registry_test.dart | 64 ++++++++++++++++ .../ios/Classes/GoogleMapController.m | 12 +++ .../ios/Classes/messages.g.h | 3 + .../ios/Classes/messages.g.m | 24 ++++++ .../lib/src/google_map_inspector_ios.dart | 8 ++ .../lib/src/messages.g.dart | 29 ++++++++ .../pigeons/messages.dart | 1 + .../google_maps_inspector_platform.dart | 11 +++ .../bitmap_registry_test.dart | 74 +++++++++++++++++-- .../lib/src/google_maps_inspector_web.dart | 9 +++ .../lib/src/image_registry.dart | 2 +- 18 files changed, 366 insertions(+), 8 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java index a74d42727e7..8101abbe9ca 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java @@ -1100,4 +1100,10 @@ public Boolean isLiteModeEnabled() { } return data; } + + @NonNull + @Override + public Boolean hasRegisteredMapBitmap(@NonNull Long id) { + return imageRegistry.getBitmap(id) != null; + } } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java index 43f03fd0d77..1e7dd9b9151 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ImageRegistry.java @@ -68,7 +68,6 @@ public void clearBitmapCache() { registry.clear(); } - /** * Retrieves a BitmapDescriptor from the registry using the provided ID. * diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Messages.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Messages.java index bd616b0c32a..b8acf57f022 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Messages.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/Messages.java @@ -7440,6 +7440,9 @@ public interface MapsInspectorApi { @NonNull List getClusters(@NonNull String clusterManagerId); + @NonNull + Boolean hasRegisteredMapBitmap(@NonNull Long id); + /** The codec used by MapsInspectorApi. */ static @NonNull MessageCodec getCodec() { return PigeonCodec.INSTANCE; @@ -7782,6 +7785,31 @@ static void setUp( channel.setMessageHandler(null); } } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.hasRegisteredMapBitmap" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + Long idArg = (Long) args.get(0); + try { + Boolean output = api.hasRegisteredMapBitmap(idArg); + wrapped.add(0, output); + } catch (Throwable exception) { + wrapped = wrapError(exception); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } } } /** diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/integration_test/bitmap_registry_tests.dart b/packages/google_maps_flutter/google_maps_flutter_android/example/integration_test/bitmap_registry_tests.dart index e282de2f28a..658d3400e88 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/example/integration_test/bitmap_registry_tests.dart +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/integration_test/bitmap_registry_tests.dart @@ -1,4 +1,8 @@ +import 'dart:async'; + +import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:google_maps_flutter_example/example_google_map.dart'; import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; void bitmapRegistryTests() { @@ -10,7 +14,15 @@ void bitmapRegistryTests() { imagePixelRatio: 1.0, ); + final int mapId = await _pumpMap(tester); await GoogleMapsFlutterPlatform.instance.registerBitmap(1, bitmap); + expect( + await GoogleMapsInspectorPlatform.instance!.hasRegisteredMapBitmap( + mapId: mapId, + bitmapId: 1, + ), + isTrue, + ); }); testWidgets('Remove bitmap from cache', (WidgetTester tester) async { @@ -19,8 +31,24 @@ void bitmapRegistryTests() { imagePixelRatio: 1.0, ); + final int mapId = await _pumpMap(tester); await GoogleMapsFlutterPlatform.instance.registerBitmap(1, bitmap); + expect( + await GoogleMapsInspectorPlatform.instance!.hasRegisteredMapBitmap( + mapId: mapId, + bitmapId: 1, + ), + isTrue, + ); + await GoogleMapsFlutterPlatform.instance.unregisterBitmap(1); + expect( + await GoogleMapsInspectorPlatform.instance!.hasRegisteredMapBitmap( + mapId: mapId, + bitmapId: 1, + ), + isFalse, + ); }); testWidgets('Clear bitmap cache', (WidgetTester tester) async { @@ -29,8 +57,44 @@ void bitmapRegistryTests() { imagePixelRatio: 1.0, ); + final int mapId = await _pumpMap(tester); await GoogleMapsFlutterPlatform.instance.clearBitmapCache(); await GoogleMapsFlutterPlatform.instance.registerBitmap(1, bitmap); + expect( + await GoogleMapsInspectorPlatform.instance!.hasRegisteredMapBitmap( + mapId: mapId, + bitmapId: 1, + ), + isTrue, + ); + await GoogleMapsFlutterPlatform.instance.clearBitmapCache(); + expect( + await GoogleMapsInspectorPlatform.instance!.hasRegisteredMapBitmap( + mapId: mapId, + bitmapId: 1, + ), + isFalse, + ); }); } + +// Pump a map and return the map ID. +Future _pumpMap(WidgetTester tester) async { + final Completer controllerCompleter = + Completer(); + + await tester.pumpWidget(Directionality( + textDirection: TextDirection.ltr, + child: ExampleGoogleMap( + initialCameraPosition: const CameraPosition(target: LatLng(0, 0)), + onMapCreated: (ExampleGoogleMapController googleMapController) { + controllerCompleter.complete(googleMapController); + }, + ), + )); + + final ExampleGoogleMapController controller = + await controllerCompleter.future; + return controller.mapId; +} diff --git a/packages/google_maps_flutter/google_maps_flutter_android/lib/src/google_map_inspector_android.dart b/packages/google_maps_flutter/google_maps_flutter_android/lib/src/google_map_inspector_android.dart index 76b8a8ce75d..4deceb24847 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/lib/src/google_map_inspector_android.dart +++ b/packages/google_maps_flutter/google_maps_flutter_android/lib/src/google_map_inspector_android.dart @@ -116,4 +116,12 @@ class GoogleMapsInspectorAndroid extends GoogleMapsInspectorPlatform { GoogleMapsFlutterAndroid.clusterFromPlatformCluster(cluster!)) .toList(); } + + @override + Future hasRegisteredMapBitmap({ + required int mapId, + required int bitmapId, + }) { + return _inspectorProvider(mapId)!.hasRegisteredMapBitmap(bitmapId); + } } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/lib/src/messages.g.dart b/packages/google_maps_flutter/google_maps_flutter_android/lib/src/messages.g.dart index f0ed0db9f84..1546bdd158e 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/lib/src/messages.g.dart +++ b/packages/google_maps_flutter/google_maps_flutter_android/lib/src/messages.g.dart @@ -3440,6 +3440,35 @@ class MapsInspectorApi { .cast(); } } + + Future hasRegisteredMapBitmap(int id) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_android.MapsInspectorApi.hasRegisteredMapBitmap$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([id]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else if (pigeonVar_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (pigeonVar_replyList[0] as bool?)!; + } + } } /// API for interacting with the image registry. diff --git a/packages/google_maps_flutter/google_maps_flutter_android/pigeons/messages.dart b/packages/google_maps_flutter/google_maps_flutter_android/pigeons/messages.dart index ce8945f2962..4d1aa5e4393 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/pigeons/messages.dart +++ b/packages/google_maps_flutter/google_maps_flutter_android/pigeons/messages.dart @@ -781,6 +781,7 @@ abstract class MapsInspectorApi { PlatformTileLayer? getTileOverlayInfo(String tileOverlayId); PlatformZoomRange getZoomRange(); List getClusters(String clusterManagerId); + bool hasRegisteredMapBitmap(int id); } /// API for interacting with the image registry. diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/integration_test/bitmap_registry_test.dart b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/integration_test/bitmap_registry_test.dart index dd0f8aeb27b..b6fd8a1856b 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/integration_test/bitmap_registry_test.dart +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/integration_test/bitmap_registry_test.dart @@ -1,6 +1,10 @@ +import 'dart:async'; + +import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; import 'package:integration_test/integration_test.dart'; +import 'package:maps_example_dart/example_google_map.dart'; void main() { IntegrationTestWidgetsFlutterBinding.ensureInitialized(); @@ -12,7 +16,15 @@ void main() { imagePixelRatio: 1.0, ); + final int mapId = await _pumpMap(tester); await GoogleMapsFlutterPlatform.instance.registerBitmap(1, bitmap); + expect( + await GoogleMapsInspectorPlatform.instance!.hasRegisteredMapBitmap( + mapId: mapId, + bitmapId: 1, + ), + isTrue, + ); }); testWidgets('Remove bitmap from cache', (WidgetTester tester) async { @@ -21,8 +33,24 @@ void main() { imagePixelRatio: 1.0, ); + final int mapId = await _pumpMap(tester); await GoogleMapsFlutterPlatform.instance.registerBitmap(1, bitmap); + expect( + await GoogleMapsInspectorPlatform.instance!.hasRegisteredMapBitmap( + mapId: mapId, + bitmapId: 1, + ), + isTrue, + ); + await GoogleMapsFlutterPlatform.instance.unregisterBitmap(1); + expect( + await GoogleMapsInspectorPlatform.instance!.hasRegisteredMapBitmap( + mapId: mapId, + bitmapId: 1, + ), + isFalse, + ); }); testWidgets('Clear bitmap cache', (WidgetTester tester) async { @@ -31,8 +59,44 @@ void main() { imagePixelRatio: 1.0, ); + final int mapId = await _pumpMap(tester); await GoogleMapsFlutterPlatform.instance.clearBitmapCache(); await GoogleMapsFlutterPlatform.instance.registerBitmap(1, bitmap); + expect( + await GoogleMapsInspectorPlatform.instance!.hasRegisteredMapBitmap( + mapId: mapId, + bitmapId: 1, + ), + isTrue, + ); + await GoogleMapsFlutterPlatform.instance.clearBitmapCache(); + expect( + await GoogleMapsInspectorPlatform.instance!.hasRegisteredMapBitmap( + mapId: mapId, + bitmapId: 1, + ), + isFalse, + ); }); } + +// Pump a map and return the map ID. +Future _pumpMap(WidgetTester tester) async { + final Completer controllerCompleter = + Completer(); + + await tester.pumpWidget(Directionality( + textDirection: TextDirection.ltr, + child: ExampleGoogleMap( + initialCameraPosition: const CameraPosition(target: LatLng(0, 0)), + onMapCreated: (ExampleGoogleMapController googleMapController) { + controllerCompleter.complete(googleMapController); + }, + ), + )); + + final ExampleGoogleMapController controller = + await controllerCompleter.future; + return controller.mapId; +} diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.m index 49008d55884..8bad6dcee57 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.m @@ -103,6 +103,7 @@ @interface FGMMapCallHandler () @interface FGMMapInspector : NSObject - (instancetype)initWithMapController:(nonnull FLTGoogleMapController *)controller messenger:(NSObject *)messenger + imageRegistry:(nonnull FGMImageRegistry *)imageRegistry pigeonSuffix:(NSString *)suffix; @end @@ -113,6 +114,8 @@ @interface FGMMapInspector () @property(nonatomic, weak) FLTGoogleMapController *controller; /// The messenger this instance was registered with by Pigeon. @property(nonatomic, copy) NSObject *messenger; +/// ImageRegistry for registering bitmaps. +@property(nonatomic, weak) FGMImageRegistry *imageRegistry; /// The suffix this instance was registered under with Pigeon. @property(nonatomic, copy) NSString *pigeonSuffix; @end @@ -232,6 +235,7 @@ - (instancetype)initWithMapView:(GMSMapView *_Nonnull)mapView SetUpFGMMapsApiWithSuffix(registrar.messenger, _callHandler, pigeonSuffix); _inspector = [[FGMMapInspector alloc] initWithMapController:self messenger:registrar.messenger + imageRegistry:imageRegistry pigeonSuffix:pigeonSuffix]; SetUpFGMMapsInspectorApiWithSuffix(registrar.messenger, _inspector, pigeonSuffix); } @@ -743,12 +747,14 @@ @implementation FGMMapInspector - (instancetype)initWithMapController:(nonnull FLTGoogleMapController *)controller messenger:(NSObject *)messenger + imageRegistry:(nonnull FGMImageRegistry *)imageRegistry pigeonSuffix:(NSString *)suffix { self = [super init]; if (self) { _controller = controller; _messenger = messenger; _pigeonSuffix = suffix; + _imageRegistry = imageRegistry; } return self; } @@ -831,4 +837,10 @@ - (nullable FGMPlatformZoomRange *)zoomRange: max:@(self.controller.mapView.maxZoom)]; } +- (nullable NSNumber *)hasRegisteredMapBitmapId:(NSInteger)id + error:(FlutterError *_Nullable __autoreleasing *_Nonnull) + error { + return [self.imageRegistry getBitmap:@(id)] ? @(YES) : @(NO); +} + @end diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.h b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.h index da317643f51..a8e88cd4102 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.h +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.h @@ -843,6 +843,9 @@ extern void SetUpFGMMapsPlatformViewApiWithSuffix(id bin - (nullable NSArray *) clustersWithIdentifier:(NSString *)clusterManagerId error:(FlutterError *_Nullable *_Nonnull)error; +/// @return `nil` only when `error != nil`. +- (nullable NSNumber *)hasRegisteredMapBitmapId:(NSInteger)id + error:(FlutterError *_Nullable *_Nonnull)error; @end extern void SetUpFGMMapsInspectorApi(id binaryMessenger, diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.m index 53347bbb340..e2867d850c7 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/messages.g.m @@ -3153,6 +3153,30 @@ void SetUpFGMMapsInspectorApiWithSuffix(id binaryMesseng [channel setMessageHandler:nil]; } } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.google_maps_flutter_ios." + @"MapsInspectorApi.hasRegisteredMapBitmap", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:FGMGetMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(hasRegisteredMapBitmapId:error:)], + @"FGMMapsInspectorApi api (%@) doesn't respond to " + @"@selector(hasRegisteredMapBitmapId:error:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSInteger arg_id = [GetNullableObjectAtIndex(args, 0) integerValue]; + FlutterError *error; + NSNumber *output = [api hasRegisteredMapBitmapId:arg_id error:&error]; + callback(wrapResult(output, error)); + }]; + } else { + [channel setMessageHandler:nil]; + } + } } void SetUpFGMImageRegistryApi(id binaryMessenger, NSObject *api) { diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/google_map_inspector_ios.dart b/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/google_map_inspector_ios.dart index 823e210ce73..745b8b59038 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/google_map_inspector_ios.dart +++ b/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/google_map_inspector_ios.dart @@ -141,4 +141,12 @@ class GoogleMapsInspectorIOS extends GoogleMapsInspectorPlatform { GoogleMapsFlutterIOS.clusterFromPlatformCluster(cluster)) .toList(); } + + @override + Future hasRegisteredMapBitmap({ + required int mapId, + required int bitmapId, + }) { + return _inspectorProvider(mapId)!.hasRegisteredMapBitmap(bitmapId); + } } diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/messages.g.dart b/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/messages.g.dart index 297d7e0df5a..040b9b89d26 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/messages.g.dart +++ b/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/messages.g.dart @@ -3215,6 +3215,35 @@ class MapsInspectorApi { .cast(); } } + + Future hasRegisteredMapBitmap(int id) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.google_maps_flutter_ios.MapsInspectorApi.hasRegisteredMapBitmap$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([id]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else if (pigeonVar_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (pigeonVar_replyList[0] as bool?)!; + } + } } /// API for interacting with the image registry. diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/pigeons/messages.dart b/packages/google_maps_flutter/google_maps_flutter_ios/pigeons/messages.dart index d7eadc4cad6..266b131aea3 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/pigeons/messages.dart +++ b/packages/google_maps_flutter/google_maps_flutter_ios/pigeons/messages.dart @@ -761,6 +761,7 @@ abstract class MapsInspectorApi { PlatformZoomRange getZoomRange(); @ObjCSelector('clustersWithIdentifier:') List getClusters(String clusterManagerId); + bool hasRegisteredMapBitmap(int id); } /// API for interacting with the image registry. diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_inspector_platform.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_inspector_platform.dart index 8bf6f6f89ba..a38baace66d 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_inspector_platform.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_inspector_platform.dart @@ -137,4 +137,15 @@ abstract class GoogleMapsInspectorPlatform extends PlatformInterface { {required int mapId, required ClusterManagerId clusterManagerId}) { throw UnimplementedError('getClusters() has not been implemented.'); } + + /// Returns true if the bitmap with the given [id] is registered in the + /// bitmap registry. + Future hasRegisteredMapBitmap({ + required int mapId, + required int bitmapId, + }) { + throw UnimplementedError( + 'hasRegisteredMapBitmap() has not been implemented.', + ); + } } diff --git a/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/bitmap_registry_test.dart b/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/bitmap_registry_test.dart index f5848be1a6a..30d2ce39a12 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/bitmap_registry_test.dart +++ b/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/bitmap_registry_test.dart @@ -1,3 +1,6 @@ +import 'dart:async'; + +import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; @@ -13,7 +16,15 @@ void main() { imagePixelRatio: 1.0, ); - await GoogleMapBitmapRegistry.instance.register(bitmap); + final int mapId = await _pumpMap(tester); + await GoogleMapsFlutterPlatform.instance.registerBitmap(1, bitmap); + expect( + await GoogleMapsInspectorPlatform.instance!.hasRegisteredMapBitmap( + mapId: mapId, + bitmapId: 1, + ), + isTrue, + ); }); testWidgets('Remove bitmap from cache', (WidgetTester tester) async { @@ -22,8 +33,24 @@ void main() { imagePixelRatio: 1.0, ); - final int id = await GoogleMapBitmapRegistry.instance.register(bitmap); - await GoogleMapBitmapRegistry.instance.unregister(id); + final int mapId = await _pumpMap(tester); + await GoogleMapsFlutterPlatform.instance.registerBitmap(1, bitmap); + expect( + await GoogleMapsInspectorPlatform.instance!.hasRegisteredMapBitmap( + mapId: mapId, + bitmapId: 1, + ), + isTrue, + ); + + await GoogleMapsFlutterPlatform.instance.unregisterBitmap(1); + expect( + await GoogleMapsInspectorPlatform.instance!.hasRegisteredMapBitmap( + mapId: mapId, + bitmapId: 1, + ), + isFalse, + ); }); testWidgets('Clear bitmap cache', (WidgetTester tester) async { @@ -32,8 +59,43 @@ void main() { imagePixelRatio: 1.0, ); - await GoogleMapBitmapRegistry.instance.clear(); - await GoogleMapBitmapRegistry.instance.register(bitmap); - await GoogleMapBitmapRegistry.instance.clear(); + final int mapId = await _pumpMap(tester); + await GoogleMapsFlutterPlatform.instance.clearBitmapCache(); + await GoogleMapsFlutterPlatform.instance.registerBitmap(1, bitmap); + expect( + await GoogleMapsInspectorPlatform.instance!.hasRegisteredMapBitmap( + mapId: mapId, + bitmapId: 1, + ), + isTrue, + ); + + await GoogleMapsFlutterPlatform.instance.clearBitmapCache(); + expect( + await GoogleMapsInspectorPlatform.instance!.hasRegisteredMapBitmap( + mapId: mapId, + bitmapId: 1, + ), + isFalse, + ); }); } + +// Pump a map and return the map ID. +Future _pumpMap(WidgetTester tester) async { + final Completer controllerCompleter = + Completer(); + + await tester.pumpWidget(Directionality( + textDirection: TextDirection.ltr, + child: GoogleMap( + initialCameraPosition: const CameraPosition(target: LatLng(0, 0)), + onMapCreated: (GoogleMapController googleMapController) { + controllerCompleter.complete(googleMapController); + }, + ), + )); + + final GoogleMapController controller = await controllerCompleter.future; + return controller.mapId; +} diff --git a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/google_maps_inspector_web.dart b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/google_maps_inspector_web.dart index 98b47430958..2b8d77f2b17 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/google_maps_inspector_web.dart +++ b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/google_maps_inspector_web.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; +import 'image_registry.dart'; import 'marker_clustering.dart'; /// Function that gets the [MapConfiguration] for a given `mapId`. @@ -103,4 +104,12 @@ class GoogleMapsInspectorWeb extends GoogleMapsInspectorPlatform { ?.getClusters(clusterManagerId) ?? []; } + + @override + Future hasRegisteredMapBitmap({ + required int mapId, + required int bitmapId, + }) async { + return ImageRegistry.instance.getBitmap(bitmapId) != null; + } } diff --git a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/image_registry.dart b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/image_registry.dart index 17d5a116900..f9a15476bf4 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/image_registry.dart +++ b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/image_registry.dart @@ -3,7 +3,7 @@ import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platf import '../google_maps_flutter_web.dart'; -/// Manages mapping between registered bitmap Ids and [gmaps.Icon] objects. +/// Manages mapping between registered bitmap IDs and [gmaps.Icon] objects. class ImageRegistry { /// Default constructor. ImageRegistry._();

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 R4dnm;002ovPDHLkV1fdo>NNlW literal 0 HcmV?d00001 diff --git a/packages/google_maps_flutter/google_maps_flutter/example/assets/red_rectangle.png b/packages/google_maps_flutter/google_maps_flutter/example/assets/red_rectangle.png deleted file mode 100644 index 72b3c669793e4e9383770ac46e6a6b53540be95b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85 zcmeAS@N?(olHy`uVBq!ia0vp^4nS { @override Widget build(BuildContext context) { - return Column( - children: [ - Expanded( - child: GoogleMap( - markers: markers, - initialCameraPosition: const CameraPosition( - target: LatLng(0, 0), - zoom: 1.0, + return SingleChildScrollView( + child: Column( + children: [ + AspectRatio( + aspectRatio: 2 / 3, + child: GoogleMap( + markers: markers, + initialCameraPosition: const CameraPosition( + target: LatLng(0, 0), + zoom: 1.0, + ), ), ), - ), - MaterialButton( - onPressed: () async { - final AssetMapBitmap bitmap = await BitmapDescriptor.asset( - ImageConfiguration.empty, - 'assets/red_rectangle.png', - ); - - _updateMarkers(bitmap); - }, - child: const Text('Test 1 (asset), no registry'), - ), - MaterialButton( - onPressed: () async { - final AssetMapBitmap asset = await BitmapDescriptor.asset( - ImageConfiguration.empty, - 'assets/red_rectangle.png', - ); - final RegisteredMapBitmap registeredBitmap = - await GoogleMapBitmapRegistry.instance.register(asset); - _updateMarkers(registeredBitmap); - }, - child: const Text('Test 1 (asset), with registry'), - ), - const Divider(), - MaterialButton( - onPressed: () async { - final ByteData byteData = - await rootBundle.load('assets/red_rectangle.png'); - final Uint8List bytes = byteData.buffer.asUint8List(); - final BytesMapBitmap bitmap = BitmapDescriptor.bytes(bytes); - _updateMarkers(bitmap); - }, - child: const Text('Test 2 (bytes), no registry'), - ), - MaterialButton( - onPressed: () async { - final ByteData byteData = - await rootBundle.load('assets/red_rectangle.png'); - final Uint8List bytes = byteData.buffer.asUint8List(); - final BytesMapBitmap bytesBitmap = BitmapDescriptor.bytes(bytes); - final RegisteredMapBitmap registeredBitmap = - await GoogleMapBitmapRegistry.instance.register(bytesBitmap); - _updateMarkers(registeredBitmap); - }, - child: const Text('Test 2 (bytes), with registry'), - ), - ], + MaterialButton( + onPressed: _addMarkersWithoutRegistry, + child: const Text('Add $_numberOfMarkers markers, no registry'), + ), + MaterialButton( + onPressed: _addMarkersWithRegistry, + child: const Text('Add $_numberOfMarkers markers using registry'), + ), + ], + ), ); } - Marker _createMarker(int id, BitmapDescriptor bitmap) { - return Marker( - markerId: MarkerId('$id'), - icon: bitmap, - position: LatLng( - Random().nextDouble() * 100 - 50, - Random().nextDouble() * 100 - 50, - ), + /// Add markers to the map with a custom bitmap as the icon. + /// + /// To show potential performance issues: + /// * large original image is used (800x600px, ~330KB) + /// * bitmap is scaled down to 64x64px + /// * bitmap is created once and reused for all markers. This doesn't help + /// much because the bitmap is still sent to the platform side for each + /// marker. + /// + /// Adding many markers may result in a performance hit, out of memory errors + /// or even app crashes. + Future _addMarkersWithoutRegistry() async { + final ByteData byteData = await rootBundle.load(_bitmapName); + final Uint8List bytes = byteData.buffer.asUint8List(); + final BytesMapBitmap bitmap = BitmapDescriptor.bytes( + bytes, + width: 64, + height: 64, ); + _updateMarkers(bitmap); } + /// Add markers to the map with a custom bitmap as the icon placed in the + /// bitmap registry beforehand. + /// + /// Similarly to [_addMarkersWithoutRegistry], this method uses the same + /// technique to show potential performance issues, however the bitmap is + /// registered in the bitmap registry before creating the markers. + Future _addMarkersWithRegistry() async { + final ByteData byteData = await rootBundle.load(_bitmapName); + final Uint8List bytes = byteData.buffer.asUint8List(); + final BytesMapBitmap bytesBitmap = BitmapDescriptor.bytes( + bytes, + width: 64, + height: 64, + ); + final int registeredBitmapId = + await GoogleMapBitmapRegistry.instance.register(bytesBitmap); + final RegisteredMapBitmap registeredBitmap = + RegisteredMapBitmap(id: registeredBitmapId); + _updateMarkers(registeredBitmap); + } + + // Create a set of markers with the given bitmap and update the state with new + // markers. void _updateMarkers(BitmapDescriptor bitmap) { final List newMarkers = List.generate( _numberOfMarkers, - (int i) => _createMarker(i, bitmap), + (int id) { + return Marker( + markerId: MarkerId('$id'), + icon: bitmap, + position: LatLng( + Random().nextDouble() * 100 - 50, + Random().nextDouble() * 100 - 50, + ), + ); + }, ); setState(() { diff --git a/packages/google_maps_flutter/google_maps_flutter/lib/src/bitmap_registry.dart b/packages/google_maps_flutter/google_maps_flutter/lib/src/bitmap_registry.dart index ceff6e9567d..a0e00081d61 100644 --- a/packages/google_maps_flutter/google_maps_flutter/lib/src/bitmap_registry.dart +++ b/packages/google_maps_flutter/google_maps_flutter/lib/src/bitmap_registry.dart @@ -1,12 +1,19 @@ part of '../google_maps_flutter.dart'; -/// A bitmap registry. Bitmaps can be created before they are used in markers -/// and then registered with the registry. This allows for more efficient -/// rendering of markers on the map. For example, if multiple markers use the -/// same bitmap, bitmap can be registered once and then reused. +/// A bitmap registry. +/// +/// Bitmaps can be created before they are used in markers and then registered +/// with the registry. This allows for more efficient rendering of markers +/// on the map. For example, if multiple markers use the same bitmap, bitmap +/// can be registered once and then reused. This eliminates the need to +/// transfer the bitmap data multiple times to the platform side. /// /// Using bitmap registry is optional. /// +/// Bitmap registry can be used after the map is initialized and displayed +/// on the screen. On Android registry can be also used after map renderer is +/// initialized without map being displayed on the screen. +/// /// Example: /// ```dart /// // Register a bitmap @@ -33,11 +40,13 @@ class GoogleMapBitmapRegistry { int _imageCount = 0; /// Registers a [bitmap] with the registry. - Future register(MapBitmap bitmap) async { + /// + /// Returns a unique identifier for the registered bitmap. + Future register(MapBitmap bitmap) async { _imageCount++; final int id = _imageCount; await GoogleMapsFlutterPlatform.instance.registerBitmap(id, bitmap); - return RegisteredMapBitmap(id: id); + return id; } /// Unregisters a bitmap with the given [id]. diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/assets/checkers.png b/packages/google_maps_flutter/google_maps_flutter_android/example/assets/checkers.png new file mode 100644 index 0000000000000000000000000000000000000000..444874d2279ee0368026350c0a99c33953a9c59a GIT binary patch literal 331719 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