From 043d87ea5aabf61dd29a6a6e634a3340dd0b50e8 Mon Sep 17 00:00:00 2001 From: lukemckinstry Date: Tue, 14 Oct 2025 14:59:33 -0400 Subject: [PATCH 01/10] add attribution for azure --- .../Source/Scene/Azure2DImageryProvider.js | 92 +++++++++++++++++-- 1 file changed, 82 insertions(+), 10 deletions(-) diff --git a/packages/engine/Source/Scene/Azure2DImageryProvider.js b/packages/engine/Source/Scene/Azure2DImageryProvider.js index 24a9d3f453a..3bc8fa0e477 100644 --- a/packages/engine/Source/Scene/Azure2DImageryProvider.js +++ b/packages/engine/Source/Scene/Azure2DImageryProvider.js @@ -1,4 +1,5 @@ import Check from "../Core/Check.js"; +import Frozen from "../Core/Frozen.js"; import Credit from "../Core/Credit.js"; import defined from "../Core/defined.js"; import Resource from "../Core/Resource.js"; @@ -41,16 +42,18 @@ const trailingSlashRegex = /\/$/; */ function Azure2DImageryProvider(options) { options = options ?? {}; - const maximumLevel = options.maximumLevel ?? 22; - const minimumLevel = options.minimumLevel ?? 0; const tilesetId = options.tilesetId ?? "microsoft.imagery"; + this._maximumLevel = options.maximumLevel ?? 22; + this._minimumLevel = options.minimumLevel ?? 0; - const subscriptionKey = + this._subscriptionKey = options.subscriptionKey ?? options["subscription-key"]; //>>includeStart('debug', pragmas.debug); - Check.defined("options.subscriptionKey", subscriptionKey); + Check.defined("options.subscriptionKey", this._subscriptionKey); //>>includeEnd('debug'); + this._tilesetId = options.tilesetId; + const resource = options.url instanceof IonResource ? options.url @@ -60,9 +63,11 @@ function Azure2DImageryProvider(options) { if (!trailingSlashRegex.test(templateUrl)) { templateUrl += "/"; } - templateUrl += `map/tile`; - resource.url = templateUrl; + const tilesUrl = `${templateUrl}map/tile`; + this._viewportUrl = `${templateUrl}map/attribution`; + + resource.url = tilesUrl; resource.setQueryParameters({ "api-version": "2024-04-01", @@ -70,7 +75,7 @@ function Azure2DImageryProvider(options) { zoom: `{z}`, x: `{x}`, y: `{y}`, - "subscription-key": subscriptionKey, + "subscription-key": this._subscriptionKey, }); let credit; @@ -83,8 +88,8 @@ function Azure2DImageryProvider(options) { const provider = new UrlTemplateImageryProvider({ ...options, - maximumLevel, - minimumLevel, + maximumLevel: this._maximumLevel, + minimumLevel: this._minimumLevel, url: resource, credit: credit, }); @@ -93,6 +98,9 @@ function Azure2DImageryProvider(options) { // This will be defined for ion resources this._tileCredits = resource.credits; + this._attributionsByLevel = undefined; + // Asynchronously request and populate _attributionsByLevel + this.getViewportCredits(); } Object.defineProperties(Azure2DImageryProvider.prototype, { @@ -263,7 +271,18 @@ Object.defineProperties(Azure2DImageryProvider.prototype, { * @returns {Credit[]|undefined} The credits to be displayed when the tile is displayed. */ Azure2DImageryProvider.prototype.getTileCredits = function (x, y, level) { - return this._imageryProvider.getTileCredits(x, y, level); + const hasAttributions = defined(this._attributionsByLevel); + + if (!hasAttributions || !defined(this._tileCredits)) { + return undefined; + } + + const innerCredits = this._attributionsByLevel.get(level); + if (!defined(this._tileCredits)) { + return innerCredits; + } + + return this._tileCredits.concat(innerCredits); }; /** @@ -306,5 +325,58 @@ Azure2DImageryProvider.prototype.pickFeatures = function ( return undefined; }; +/** + * Get attribution for imagery from Azure Maps to display in the credits + * @private + * @return {Promise>} The list of attribution sources to display in the credits. + */ +Azure2DImageryProvider.prototype.getViewportCredits = async function () { + const maximumLevel = this._maximumLevel; + + const promises = []; + for (let level = 0; level < maximumLevel + 1; level++) { + promises.push( + fetchViewportAttribution( + this._viewportUrl, + this._subscriptionKey, + this._tilesetId, + level, + ), + ); + } + const results = await Promise.all(promises); + + const attributionsByLevel = new Map(); + for (let level = 0; level < maximumLevel + 1; level++) { + const credits = []; + const attributions = results[level].join(","); + if (attributions) { + const levelCredits = new Credit(attributions); + credits.push(levelCredits); + } + attributionsByLevel.set(level, credits); + } + + this._attributionsByLevel = attributionsByLevel; + + return attributionsByLevel; +}; + +async function fetchViewportAttribution(url, key, tilesetId, level) { + const viewport = await Resource.fetch({ + url: url, + queryParameters: { + tilesetId, + "subscription-key": key, + "api-version": "2024-04-01", + zoom: level, + bounds: "-180,-90,180,90", + }, + data: JSON.stringify(Frozen.EMPTY_OBJECT), + }); + const viewportJson = JSON.parse(viewport); + return viewportJson.copyrights; +} + // Exposed for tests export default Azure2DImageryProvider; From 93fa6df9f4473c998f281bb41a5cb0e5f335d12f Mon Sep 17 00:00:00 2001 From: lukemckinstry Date: Fri, 24 Oct 2025 13:35:47 -0400 Subject: [PATCH 02/10] update imagery tutorial sandcastle --- Apps/Sandcastle/gallery/Imagery Layers.html | 6 +++--- packages/sandcastle/gallery/imagery-layers/main.js | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Apps/Sandcastle/gallery/Imagery Layers.html b/Apps/Sandcastle/gallery/Imagery Layers.html index 34ee6db78f3..8fc5abd0ed5 100644 --- a/Apps/Sandcastle/gallery/Imagery Layers.html +++ b/Apps/Sandcastle/gallery/Imagery Layers.html @@ -30,9 +30,9 @@ "use strict"; //Sandcastle_Begin const viewer = new Cesium.Viewer("cesiumContainer", { - baseLayer: Cesium.ImageryLayer.fromWorldImagery({ - style: Cesium.IonWorldImageryStyle.AERIAL_WITH_LABELS, - }), + baseLayer: Cesium.ImageryLayer.fromProviderAsync( + Cesium.IonImageryProvider.fromAssetId(3830183), + ), baseLayerPicker: false, }); const layers = viewer.scene.imageryLayers; diff --git a/packages/sandcastle/gallery/imagery-layers/main.js b/packages/sandcastle/gallery/imagery-layers/main.js index 591d0ad00ad..4b6f9d1f6fe 100644 --- a/packages/sandcastle/gallery/imagery-layers/main.js +++ b/packages/sandcastle/gallery/imagery-layers/main.js @@ -1,9 +1,9 @@ import * as Cesium from "cesium"; const viewer = new Cesium.Viewer("cesiumContainer", { - baseLayer: Cesium.ImageryLayer.fromWorldImagery({ - style: Cesium.IonWorldImageryStyle.AERIAL_WITH_LABELS, - }), + baseLayer: Cesium.ImageryLayer.fromProviderAsync( + Cesium.IonImageryProvider.fromAssetId(3830183), + ), baseLayerPicker: false, }); const layers = viewer.scene.imageryLayers; From 8a963092c835f004530e83bbfab45ea703f95359 Mon Sep 17 00:00:00 2001 From: lukemckinstry Date: Fri, 24 Oct 2025 14:03:19 -0400 Subject: [PATCH 03/10] docs typo --- packages/engine/Source/Scene/Google2DImageryProvider.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/engine/Source/Scene/Google2DImageryProvider.js b/packages/engine/Source/Scene/Google2DImageryProvider.js index 27a812311c3..360f4b5ec6c 100644 --- a/packages/engine/Source/Scene/Google2DImageryProvider.js +++ b/packages/engine/Source/Scene/Google2DImageryProvider.js @@ -312,7 +312,7 @@ Object.defineProperties(Google2DImageryProvider.prototype, { * }); * @example * // Google 2D roadmap overlay with custom styles - * const googleTileProvider = Cesium.Google2DImageryProvider.fromIonAssetId({ + * const googleTilesProvider = Cesium.Google2DImageryProvider.fromIonAssetId({ * assetId: 3830184, * overlayLayerType: "layerRoadmap", * styles: [ @@ -403,7 +403,7 @@ Google2DImageryProvider.fromIonAssetId = async function (options) { * // Google 2D roadmap overlay with custom styles * Cesium.GoogleMaps.defaultApiKey = "your-api-key"; * - * const googleTileProvider = Cesium.Google2DImageryProvider.fromUrl({ + * const googleTilesProvider = Cesium.Google2DImageryProvider.fromUrl({ * overlayLayerType: "layerRoadmap", * styles: [ * { From ad1944c5b052e91a6a0458063cdb283f1e63b63d Mon Sep 17 00:00:00 2001 From: lukemckinstry Date: Fri, 24 Oct 2025 14:12:43 -0400 Subject: [PATCH 04/10] make Azure class public --- packages/engine/Source/Scene/Azure2DImageryProvider.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/engine/Source/Scene/Azure2DImageryProvider.js b/packages/engine/Source/Scene/Azure2DImageryProvider.js index 3bc8fa0e477..e94b8b19bad 100644 --- a/packages/engine/Source/Scene/Azure2DImageryProvider.js +++ b/packages/engine/Source/Scene/Azure2DImageryProvider.js @@ -30,7 +30,6 @@ const trailingSlashRegex = /\/$/; * * @alias Azure2DImageryProvider * @constructor - * @private * @param {Azure2DImageryProvider.ConstructorOptions} options Object describing initialization options * * @example From e2e7245acbf15eb68a2f3174363f9aee304ce480 Mon Sep 17 00:00:00 2001 From: lukemckinstry Date: Fri, 24 Oct 2025 14:14:22 -0400 Subject: [PATCH 05/10] move azure sandcastles out of development folder --- .../gallery/{development => }/Azure 2D Tiles.html | 0 .../gallery/{development => }/Azure 2D Tiles.jpg | Bin 2 files changed, 0 insertions(+), 0 deletions(-) rename Apps/Sandcastle/gallery/{development => }/Azure 2D Tiles.html (100%) rename Apps/Sandcastle/gallery/{development => }/Azure 2D Tiles.jpg (100%) diff --git a/Apps/Sandcastle/gallery/development/Azure 2D Tiles.html b/Apps/Sandcastle/gallery/Azure 2D Tiles.html similarity index 100% rename from Apps/Sandcastle/gallery/development/Azure 2D Tiles.html rename to Apps/Sandcastle/gallery/Azure 2D Tiles.html diff --git a/Apps/Sandcastle/gallery/development/Azure 2D Tiles.jpg b/Apps/Sandcastle/gallery/Azure 2D Tiles.jpg similarity index 100% rename from Apps/Sandcastle/gallery/development/Azure 2D Tiles.jpg rename to Apps/Sandcastle/gallery/Azure 2D Tiles.jpg From c5d2c3109617e814da71aa508beae584f0faa2cc Mon Sep 17 00:00:00 2001 From: lukemckinstry Date: Fri, 24 Oct 2025 14:46:01 -0400 Subject: [PATCH 06/10] add azure maps to default options in imagery layer picker --- .../createDefaultImageryProviderViewModels.js | 42 ++++++++++++++++++ .../Images/ImageryProviders/azureAerial.png | Bin 0 -> 32446 bytes .../ImageryProviders/azureLabelsOnly.png | Bin 0 -> 15021 bytes .../Images/ImageryProviders/azureRoads.png | Bin 0 -> 25152 bytes 4 files changed, 42 insertions(+) create mode 100644 packages/widgets/Source/Images/ImageryProviders/azureAerial.png create mode 100644 packages/widgets/Source/Images/ImageryProviders/azureLabelsOnly.png create mode 100644 packages/widgets/Source/Images/ImageryProviders/azureRoads.png diff --git a/packages/widgets/Source/BaseLayerPicker/createDefaultImageryProviderViewModels.js b/packages/widgets/Source/BaseLayerPicker/createDefaultImageryProviderViewModels.js index a999c31b23a..34295ca5449 100644 --- a/packages/widgets/Source/BaseLayerPicker/createDefaultImageryProviderViewModels.js +++ b/packages/widgets/Source/BaseLayerPicker/createDefaultImageryProviderViewModels.js @@ -375,6 +375,48 @@ of the world.\nhttp://www.openstreetmap.org", }), ); + providerViewModels.push( + new ProviderViewModel({ + name: "Azure Maps Aerial", + iconUrl: buildModuleUrl( + "Widgets/Images/ImageryProviders/azureAerial.png", + ), + tooltip: "Imagery from Azure Maps", + category: "Cesium ion", + creationFunction: function () { + return IonImageryProvider.fromAssetId(3891168); + }, + }), + ); + + providerViewModels.push( + new ProviderViewModel({ + name: "Azure Maps Roads", + iconUrl: buildModuleUrl("Widgets/Images/ImageryProviders/azureRoads.png"), + tooltip: + "Labeled roads and other features on a base landscape from Azure Maps", + category: "Cesium ion", + creationFunction: function () { + return IonImageryProvider.fromAssetId(3891169); + }, + }), + ); + + providerViewModels.push( + new ProviderViewModel({ + name: "Azure Maps Labels Only", + iconUrl: buildModuleUrl( + "Widgets/Images/ImageryProviders/azureLabels.png", + ), + tooltip: + "Place labels from Azure Maps to combine with other imagery such as Sentinel-2", + category: "Cesium ion", + creationFunction: function () { + return IonImageryProvider.fromAssetId(3891170); + }, + }), + ); + return providerViewModels; } export default createDefaultImageryProviderViewModels; diff --git a/packages/widgets/Source/Images/ImageryProviders/azureAerial.png b/packages/widgets/Source/Images/ImageryProviders/azureAerial.png new file mode 100644 index 0000000000000000000000000000000000000000..7542b42e170f04a7a7bfd0ae67176b4e726363ea GIT binary patch literal 32446 zcmXt9cQl*-+wMS7yGp28RJ2B@J!=LPvu06y)ZUvKMbXem(P-__QfX~swPuyn`f3ow zUZJt~c%R=NZ_Y__l9O}t$&-6r_jO(O8$*34Ej2s!wQJXCb+k2%f#)FL9!yCAJRW9D zGXYOz0ctwWD1lofrBgESnk`V%BGAOgB{0O^-}#!Ww~v>zNPwfiv$J=An@=F=W`{EH zA(8)mNZsGrKG5CAo9CIkm-96(e|H`UNge~oKpqK*gcJ`%LjJL=JVc7e5XPga@k}Dx zZ0XuHo@+W9s?S0{YP9yjoh`G6T9T6B z2~Gd?6NZnzw(4}0a7&w_mWs@@--ExlGeidmVb(1hZq0HNIFXx>1n7^M>3?z&Vmns^ ztA(p$!j*X~fyCB(ed}f2Uu(kjh@{AkH`f(qG!*EHV~c)`SQR77ww`0q#b62B=nE;a z7wt|UTCH%mzOFRBMaTk%PFJTBGMAaIytJ_pS2^$q!k0(f&W<_B{+R!XDM8uQ)s>R$ z=;&y0CBW?HQTy3Hg~%awp&rP7YxG6Rj5idNs5gq_zB-1=!qrVpTU#*q>29*5lIsdh zp%*tcvUrlUN0CKf?J>|Ro^7E4MD!Y{?_G`X2mSJHqrsQ;4j>vdQJjVkO=N;zZG?cl)I=#G#3laST7|y?A z_Wt`$`ui0%PT8y10&SqEGU3$#Zy)ao@5aG0A!o}UvKb{pnI~zJ{yGG@rIxgd==9mG zV7+pa!^ylNu&lE31DYFT1<0F}C8KG@KWX^#79Gf#Ew#p^j$?<$$_*yA8m&88)ZDS& zFL-;jWdd`e3&fSwD1R9KrCoPY%VU*m*@Y4{_sdgi0w450_ohj`X<4Ad^1=V0>AsJ|u+3|p6v7~a5? zxwEhA$(5Ivg9VzRkLcd~q`z5`Vci<0PB=WaO)i$&=(zB?ocwmyUQV>CGyeGTBLf9v zENRg#sgShZlK10CXCZ-SyMK=Z>QN-i54*#qq%61{rP$Xqf~xuT?$x5(g6zWaF(ocY zd?LoIGNR#3iI1X6DrR?2W&Zs9`L)u!Q3P>1rA+tVk~+WkKKg-vq$R`-dCD&@Y(1YU zn?KoG?KX0Hp)oTYL~BDZ%92}@?$0kHei`T+Fsc8<=M8N2RaI+0nqp?0Okv z3%nwb$hC?J?J;JdyNeTK7AZVA%-X%J{Rw?A)(Bw0@fR70gDf&96m?YAEHVP#juaT4ENk2T`2)Dn>M+ zFxTzG^D|x9Of8uxt}hOou#h_&Nx=DFQ*#kqH`c=M@s2uCJL|l24fGlq4mvK3M;MyZ z=9c~NlXOQ6htQ%Ii%LtfsReE&Mt9pmT)NW|jX(>sTDtwRa5B|bM9j70_NZzb93#bb z7fEK#9p60+y36lw7lh&XI(%`M{&`8oHOR`vNMna|FNEf15Z)LkwK#l7lh;aUs-d*P zqZ6zqhr0jGw=VuP`)VP(gRAe|q*Ld}2&1O$_HuU2-0nhLJIU9kFVXt3#J-ZFPlr1@ z6as(6yKU_0xTAjgOS?8(+-Gn)Q|f})C07tx_hm3boHbX<)N&zTiEU(rB zHEmb&KB#Brkq8s3NXZ`01{qAhr5}Y?0T?h)hmwbcZ^xtd+3N7_&%1 zfjj%5B?XA1%5rek+SV4~%%&?;mMOFd6f-^-GTgWw&7$o6(rb>s^}PW$WDH5lI?NE% zJ8wzKa@7`5dzInfo8QFH5YUrre2tAE-S*l{(AKcCtj2F0f-n<3mC^dc26t!mibXeT z-17cDvZBH*SEU`&=a*cRTq8^scdbe)ieQp;*9#A!;nU%`o>)lQQOwTFyfa;;4x%{D zOInouFX$}eW>UK#><-e*DNG+HO&0sq)HF0N=`X6miw%0Fm{#2w+HAcLap)Xm<4PX{ zx-oZ3w*v&Ly}dF1NRiM(f8Mp6p<(3Yk*@wL>gsMHudZ$hvs;I4Dt&d*d=q;o%ze(nf{P*f54I4S1**1vz=Cu=>AQD{M$ z8#i#SYZ0h2dr)}ik8_tpk*Q>t>ejQ(%Y^=*$GwE})AX>^nx8tQu1K>p5JO6fX=%r>MWLQ}@_YgAXjcHm8 z-BiDWc8ZY);p+IK&7+9ROVTC02<*A`V(`TLYP@64t-4?^;IxdFS{;e7d-5=L(T%K= z<-Us($W!X~e8O!%uyjIOSQ)n;XOe6~;mPR=DznxRX$&gZvf}8|)Wt53E1Y+EMV%j0 zm6yAoALd8*c{d8A+${Q0?yeh2C|Bkv^5f7Mqf%ukLOL{CGxdpEW|=INzV%J|EDq

}d2_S=h10AhG(g|d(EEt)ioh6 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 literal 0 HcmV?d00001 diff --git a/packages/widgets/Source/Images/ImageryProviders/azureLabelsOnly.png b/packages/widgets/Source/Images/ImageryProviders/azureLabelsOnly.png new file mode 100644 index 0000000000000000000000000000000000000000..f58bb0d5384992961f95ace29c4aa23e3e92a52b GIT binary patch literal 15021 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 bJYL#(oSPHDG6}rh;gO=8nrx-CMd<$kQW>iO literal 0 HcmV?d00001 From a060483d18453a3c82e19f0d12b67b1e25b9ae91 Mon Sep 17 00:00:00 2001 From: lukemckinstry Date: Thu, 30 Oct 2025 10:49:01 -0400 Subject: [PATCH 07/10] use derived resources for attribution calls --- .../Source/Scene/Azure2DImageryProvider.js | 35 +++++++++++++------ .../Source/Scene/Google2DImageryProvider.js | 19 ++++------ 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/packages/engine/Source/Scene/Azure2DImageryProvider.js b/packages/engine/Source/Scene/Azure2DImageryProvider.js index e94b8b19bad..c6856f60761 100644 --- a/packages/engine/Source/Scene/Azure2DImageryProvider.js +++ b/packages/engine/Source/Scene/Azure2DImageryProvider.js @@ -71,12 +71,14 @@ function Azure2DImageryProvider(options) { resource.setQueryParameters({ "api-version": "2024-04-01", tilesetId: tilesetId, + "subscription-key": this._subscriptionKey, zoom: `{z}`, x: `{x}`, y: `{y}`, - "subscription-key": this._subscriptionKey, }); + this._resource = resource; + let credit; if (defined(options.credit)) { credit = options.credit; @@ -98,8 +100,6 @@ function Azure2DImageryProvider(options) { // This will be defined for ion resources this._tileCredits = resource.credits; this._attributionsByLevel = undefined; - // Asynchronously request and populate _attributionsByLevel - this.getViewportCredits(); } Object.defineProperties(Azure2DImageryProvider.prototype, { @@ -300,7 +300,21 @@ Azure2DImageryProvider.prototype.requestImage = function ( level, request, ) { - return this._imageryProvider.requestImage(x, y, level, request); + const promise = this._imageryProvider.requestImage(x, y, level, request); + + // If the requestImage call returns undefined, it couldn't be scheduled this frame. Make sure to return undefined so this can be handled upstream. + if (!defined(promise)) { + return undefined; + } + + // Asynchronously request and populate _attributionsByLevel if it hasn't been already. We do this here so that the promise can be properly awaited. + if (promise && !defined(this._attributionsByLevel)) { + return Promise.all([promise, this.getViewportCredits()]).then( + (results) => results[0], + ); + } + + return promise; }; /** @@ -336,6 +350,7 @@ Azure2DImageryProvider.prototype.getViewportCredits = async function () { for (let level = 0; level < maximumLevel + 1; level++) { promises.push( fetchViewportAttribution( + this._resource, this._viewportUrl, this._subscriptionKey, this._tilesetId, @@ -361,19 +376,17 @@ Azure2DImageryProvider.prototype.getViewportCredits = async function () { return attributionsByLevel; }; -async function fetchViewportAttribution(url, key, tilesetId, level) { - const viewport = await Resource.fetch({ - url: url, +async function fetchViewportAttribution(resource, url, key, tilesetId, level) { + const viewportResource = resource.getDerivedResource({ + url, queryParameters: { - tilesetId, - "subscription-key": key, - "api-version": "2024-04-01", zoom: level, bounds: "-180,-90,180,90", }, data: JSON.stringify(Frozen.EMPTY_OBJECT), }); - const viewportJson = JSON.parse(viewport); + + const viewportJson = await viewportResource.fetchJson(); return viewportJson.copyrights; } diff --git a/packages/engine/Source/Scene/Google2DImageryProvider.js b/packages/engine/Source/Scene/Google2DImageryProvider.js index 360f4b5ec6c..45dbe10e2e0 100644 --- a/packages/engine/Source/Scene/Google2DImageryProvider.js +++ b/packages/engine/Source/Scene/Google2DImageryProvider.js @@ -101,6 +101,8 @@ function Google2DImageryProvider(options) { key: encodeURIComponent(options.key), }); + this._resource = resource.clone(); + let credit; if (defined(options.credit)) { credit = options.credit; @@ -533,12 +535,7 @@ Google2DImageryProvider.prototype.getViewportCredits = async function () { const promises = []; for (let level = 0; level < maximumLevel + 1; level++) { promises.push( - fetchViewportAttribution( - this._viewportUrl, - this._key, - this._session, - level, - ), + fetchViewportAttribution(this._resource, this._viewportUrl, level), ); } const results = await Promise.all(promises); @@ -559,12 +556,10 @@ Google2DImageryProvider.prototype.getViewportCredits = async function () { return attributionsByLevel; }; -async function fetchViewportAttribution(url, key, session, level) { - const viewport = await Resource.fetch({ - url: url, +async function fetchViewportAttribution(resource, url, level) { + const viewportResource = resource.getDerivedResource({ + url, queryParameters: { - key, - session, zoom: level, north: 90, south: -90, @@ -573,7 +568,7 @@ async function fetchViewportAttribution(url, key, session, level) { }, data: JSON.stringify(Frozen.EMPTY_OBJECT), }); - const viewportJson = JSON.parse(viewport); + const viewportJson = await viewportResource.fetchJson(); return viewportJson.copyright; } From 46ac4e6170ca2a9423ecf47509992d4d96268ef1 Mon Sep 17 00:00:00 2001 From: lukemckinstry Date: Thu, 30 Oct 2025 10:52:13 -0400 Subject: [PATCH 08/10] remove labels only layers from base layer picker defaults --- .../createDefaultImageryProviderViewModels.js | 30 ------------------- 1 file changed, 30 deletions(-) diff --git a/packages/widgets/Source/BaseLayerPicker/createDefaultImageryProviderViewModels.js b/packages/widgets/Source/BaseLayerPicker/createDefaultImageryProviderViewModels.js index 34295ca5449..8f7c807fcbf 100644 --- a/packages/widgets/Source/BaseLayerPicker/createDefaultImageryProviderViewModels.js +++ b/packages/widgets/Source/BaseLayerPicker/createDefaultImageryProviderViewModels.js @@ -345,21 +345,6 @@ of the world.\nhttp://www.openstreetmap.org", }), ); - providerViewModels.push( - new ProviderViewModel({ - name: "Google Maps Labels Only", - iconUrl: buildModuleUrl( - "Widgets/Images/ImageryProviders/googleLabels.png", - ), - tooltip: - "Place labels from Google Maps to combine with other imagery such as Sentinel-2", - category: "Cesium ion", - creationFunction: function () { - return IonImageryProvider.fromAssetId(3830185); - }, - }), - ); - providerViewModels.push( new ProviderViewModel({ name: "Google Maps Contour", @@ -402,21 +387,6 @@ of the world.\nhttp://www.openstreetmap.org", }), ); - providerViewModels.push( - new ProviderViewModel({ - name: "Azure Maps Labels Only", - iconUrl: buildModuleUrl( - "Widgets/Images/ImageryProviders/azureLabels.png", - ), - tooltip: - "Place labels from Azure Maps to combine with other imagery such as Sentinel-2", - category: "Cesium ion", - creationFunction: function () { - return IonImageryProvider.fromAssetId(3891170); - }, - }), - ); - return providerViewModels; } export default createDefaultImageryProviderViewModels; From e7bcd7d18391c416be0ee3e37db3d09b1ed19844 Mon Sep 17 00:00:00 2001 From: lukemckinstry Date: Thu, 30 Oct 2025 11:59:48 -0400 Subject: [PATCH 09/10] update specs --- packages/engine/Specs/Scene/Azure2DImageryProviderSpec.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/engine/Specs/Scene/Azure2DImageryProviderSpec.js b/packages/engine/Specs/Scene/Azure2DImageryProviderSpec.js index bef5c5d85dc..d4052592664 100644 --- a/packages/engine/Specs/Scene/Azure2DImageryProviderSpec.js +++ b/packages/engine/Specs/Scene/Azure2DImageryProviderSpec.js @@ -40,8 +40,10 @@ describe("Scene/Azure2DImageryProvider", function () { tilesetId: "a-tileset-id", }); + provider._attributionsByLevel = {}; + expect(provider.url).toEqual( - "https://atlas.microsoft.com/map/tile?api-version=2024-04-01&tilesetId=a-tileset-id&zoom={z}&x={x}&y={y}&subscription-key=test-subscriptionKey", + "https://atlas.microsoft.com/map/tile?api-version=2024-04-01&tilesetId=a-tileset-id&subscription-key=test-subscriptionKey&zoom={z}&x={x}&y={y}", ); expect(provider.tileWidth).toEqual(256); expect(provider.tileHeight).toEqual(256); @@ -74,6 +76,8 @@ describe("Scene/Azure2DImageryProvider", function () { rectangle: rectangle, }); + provider._attributionsByLevel = {}; + expect(provider.tileWidth).toEqual(256); expect(provider.tileHeight).toEqual(256); expect(provider.maximumLevel).toBe(22); @@ -133,6 +137,7 @@ describe("Scene/Azure2DImageryProvider", function () { subscriptionKey: "test-subscriptionKey", tilesetId: "a-tileset-id", }); + provider._attributionsByLevel = {}; const layer = new ImageryLayer(provider); From fe54e66971344c15c267ab424396d186fc04e675 Mon Sep 17 00:00:00 2001 From: lukemckinstry Date: Thu, 30 Oct 2025 12:36:28 -0400 Subject: [PATCH 10/10] remove labels thumbnails --- .../Images/ImageryProviders/azureLabelsOnly.png | Bin 15021 -> 0 bytes .../Images/ImageryProviders/googleLabels.png | Bin 15520 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 packages/widgets/Source/Images/ImageryProviders/azureLabelsOnly.png delete mode 100644 packages/widgets/Source/Images/ImageryProviders/googleLabels.png diff --git a/packages/widgets/Source/Images/ImageryProviders/azureLabelsOnly.png b/packages/widgets/Source/Images/ImageryProviders/azureLabelsOnly.png deleted file mode 100644 index f58bb0d5384992961f95ace29c4aa23e3e92a52b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15021 zcma)D19v1{*NxNRWMZ>p+qP{_oQdsBY}r7<07u* zqH1sM;%@9@24-PrZ)-;HY~o~QX6I~a?{W>Sm!H=XG_T@!H1F_<MSw3rU`rJM3zn7c$Qr>&P-M!$O#nH;Tac~K44iG_8fhBy z*6+#hU(6keHhOTwz312W(TyF>7Dv_MW3ft zgwD?=EV+z3!spFr?_6Iunk-Ju+Zlg>LGI&^+#doS5uW#{PWSRNOpk}_a3PtVmzVBZ zT$H^z?go?p#R<&N)_lY~Z@nYxD>@uyptbHrW^tbunY3PSVMznoBBPvJ-*YFln!MQe z6}dBMYdW(qCh)j_ZGc_19n09YetDWtAwrn_G5QuRgg8CLwIakIx#*;VFY;82lwq^3 zaH)6BX@qiF3#1^vq$Ljyq9`bfUHn3Rf6_7Y!+Hs)<9!3-j zIc7w$QXDEN?TE;fRYd=^W?iqTqYH1$fNJ@9(jE58LQ7nRF^hw}&SupsT8uDG;0`&9 zV=*ZsBM1eV(C6kGo7;(vR@07jC3Cn?9K&X1_D{t@t)mHKQ%+ov+f}=42G1iT=Cu96ZrC;{Vch*uR$QH#EInu_ zd!RPpZl$N{U+B7cJ!ue1{FNpS&t%jBwH6bj7~3ynZB*(@vV>a8-*Z+`*ekEsJ{P)x zj`x%mNkBv_F#=P3FiLCEw=0lANHRXI2xnGFijr|zY*7u$uHz7%Kzy#&6wfLbAR6|% zQrn$!cBbR^9d`TiSU_E74PHS7Hg8p_S<964{4b%1WEAY58ppGz@C7bvoaoMsQz6xk z>@wF|s|`N#7*-y~!rHIK(r9ryogf~9%g3;p4jSy|(%7&Llp=D$zhg7VP=viW^$o!NV;GN*+k2`JkNQg)%{?=+qW>u7_Q^#g#Io`p&xhzWZQXbKk)OBepT4pC zzOYOy#Ac&|B}4%g)z~m5obJD69N->Jw+k#~wpMf@7XV6*ZlT*iS;%>%KSpxOzH9gk z!|rYsvvq?el2i%^4EUo!Y=j!6BSnqUU!8AD;tTuw$?&R}5(qb#nCC7Cyev?9MsIfb z&oRnj5Qxr#QqsGtvNqEKjX|??HfWN6j_Ld6&Fm5-rbikqqz)~R7fC5UP!5NV;PU(1 z&4M~zi0jwh{Tg&uxGX+$U&MaHN~-)B)%Pmqy8W-Ca^s#+mrjviF0sV8Qglj7C`h8_+wz1#yg zzdp8Nq&vDxftc(!Z}GwqI+? zumg5hOB>hSLi?^pFT2PSu}RI{Ec+isgsBcJCdwT7tvNv)o(~RcRePQ$Iti$wXqXb zyAFUNrqPF#9mSc02}X;X4d-tWb(pfm1xap6LV{BJ9E;cu#c4ffg!v#JFeBhjZD1JB?c8mAHqml-Y7y7qaf^7>de1j4;10Fx zKyPbHvZSuIu%t0{T_cd~(3)V8=b5ti>j#m~i^X(DKIQ$9;IO)8UMypmr(!UCB2)JR zRhqsZdYYjl)NJs&_DFC9zvoWhm{i3dYZ+Oz4aZ}#c~+g)-B9Ulk9lJBIYhBqT?Z)t z&>#}g4pf`B9rn(0rPy6`5pAApHtG*YqtV;$a{{oN%}Yi(tgT zH%IRo@WkVe)0eUzYmDWm*Z@okwQ`D&2A%yOqrYcBoZ$DL?XM@qNZF4v8h~+)?L>Rg z++R&_O?_7qg;KOqRZ-;&GecdJC3Uu+fJSBgO`+dWL#gylWfh^x@G3HD@`Y3k!?6U@ z<99lHw>Bk;w59d+xZ=ulu0i5aOZCRS1G#V*z^W>6wMEm7R%0R7Qyk@KzI#CEkL#F; z)j-lr9B(mqm>*Z6M@)`wY(4@Q;s{{6No%A(nihoxK23R2ZHmjZoF3UrQ4#HWnFfe; zn5Sq8>tyyKs@OQ8wVPP_%jN{|uQ=#v<(8|V`R+y+_}(vQ%OZzdmvf^=O!jWM9NOrD zX9H-U76BCr{~)YB-g7ee-bT-*%1O#0o52=^=o2-1#ZaZbw!(o@Bc`U_D@kaZiNHNn zs|+JAttOUUw79PRpOVqP9!~m%ocfOe%%>LvZF`ZGD59% zfT%Dfr~Pb~DPSw-zpUEgRgADPRWbpH_{fs)8w2&gxw3%9PH&D9_>B{oO6`UOlQ@Eq zLXO@0S1Nk?{ECX$Jyb?@b?{KcQw3RBym=K6)K%-twp!jfwr-ww-o7E?p7EcAPN$1{ z&2DV;i(}PFd1g>X=+`u)H{A_Hs?4=VD_A_SK^LkU8P8YRA^V&y7hGn(Wks8a;2k`ia zgpPHrtd=}6@WW3|w+u<0&Ed)OKWZwfoq-=3^=`H(0eLww1DJtQRDHDx2BC2$W1y#6 zsVxX`;F2Mpg#qy8vVGvpmMSu*nlU>c>DhH$T6gFr{RJnvXbV80Ni8M|p7;ABHO-0c zviWN)u?gRI(&%Vfdm4_CP^QJM*ym1~lv)o~g-5l0d$UhOC1{~8qUGBcujlJg9yHV6 zb1Paiyw^T*Zf+DR@OE8~GPyo?@>|~SnD$-1L=&l1M^_zrM@LzV#1Tudp8e4^+{x$KA>Xh1~*J!=r*81KBhNaeU_o`&qQE0Feuv z!)fygw>b>VM$~26(@n}K5>XiC?N0Qx`55g5$U#(fQ?tYQ+1d;#Er++kxz5j}Whquz z2h!jG>L?U3B{48+=tNSesWGSL{BW>T7fAj;67W%(r-J#>cNn^s*5M{Pr&OegY7MCu zrx%*UHzv4Nl{!r!l{Q%V?dbI$w@x&)koewvBpwSN01}V$DICj8G=0vpii*;5WsCbG z9f@e{RK0a+In^~)w+Rs$Cixgbe)!w>u4ux|IOYFB<8yO!)mSNbDAuLW#U0MdOXp{2 z<-~`)wqBnt0K0OTVC1vokDPj9AjqMn8865uhE-=*QddIvj+O(WvavzUxiUH*+Z<*7 zj&$HMe!XLl#-59tGx2J$G+<58vQvR;r3wmE6160=oRF04MTB~$Vlky~{szYUW(pB~ zd45!)=Bm{I>fb2n;8$JR^IQq@6P(+0d&zJkySGJkE~gSp>QLAM2gDy=E){?An2}&J zVN_)H9MMd9Zd(U0-AK{lu%*#bBCRUM>_j1fp#^9FF-yxbM~M5 zq0Cb)78y4;n9%CGUc-{Yb2vh;8;Y-|7EaI4CU_fLr8Ndw3OgaX?5G8^LT+Fdr}aOz zCgNhqG+L~moCzxV@SKTEg-M}fm>Or!%B3@_IRfsd4{YErBTMn6sV>APTe-h}P|ASe zqH?lY(3#vZ&X^5^($g6C+r(zc=N zRZQlSC?)b)Q~%0q8mtyD^%$^3(k(M1QQTzXQH$iPeyME!39{Sty4#Dg|Bos#mmi_d zVziw7cG?)cfP=u{k4piiP0I03fq~b9Q%hRNSuMSB2WS4pl~OHUVEw?oH&=mNx_$TdP3j(~9xH>*uN*dzpkVAsNKb!$ z^N#WM=uTSPAK2z8MkxgEZCZF6bEk3ihh^2-? zP&a2f%LPD_@F9QhV$b@z+1CvJJA?092%L`rDNVBP5Vb6`u|uugDBZTG^e-Y&hUB#X zLrFJwFPkm2C?5=xyfIIE&GfYi@P1#4kYK5ppE|1(A2!n*Veu5TRS$lyEF`ykoVlZqdE>1rdnWO&uG_T^f=Ds)t@W7 z078 zq&|y=`FCO+1zs8zEd3Ha&DWmi!|{gkn{q|JL2R~-gewPrE?madHCgT1(syF#>r-Tz z9GOyDg2d(Mut?|pM?ja>{KrZ`qbiqhe8#2G4l$8mkG_3zu-Hcb8&M@|M-bt5LSg^a z)8k8Q^$O?9DnK1UiS>+y-r%V)bewagAR&i5TBA{~gjo#D9iK4LKG z=U-XdaP3S}WU;zmUP0Zu={A8BCPz2XyvPBAI`;3~T2FSW@v8D8I7wwFx%?;n#|@u_a_9=|julIJ;&&J8wfwjtw(7MPw(p zzKwEth;er}L1Z*N$rP#`xk*+!YSOIIceoSDSTZBB}@3CG=&qVF3EOYG1_ZZSY6-o982kzGz}Pl36q z%j*K8pCg;0KWmiIs2GaaY&3E3pb*$6EJf?R;<3X?LD%a;(hTzygw3!AS|C`nf(EgJ zQOg@lK2p|w1?55$MUQN6L=lcKT43tIBWeJvXE!nck{+Owpe60R7~8>;*AjHS??7{K zz-?*AvQ{Nl)yL%&r|u`{TSl82_U-b_-?Kl(DM&iI(mSe5j_>KBDI=2;EZP(-I;H1w z+n4P$ZcGI~xJO^9we_ds-+b}kz7JV2xfzYGFXp=FwFehq zX+dJMzWKJm9$c%Bl0JKcBe zTv$PafR%dxpnA=0x8X3q(1nh9d@lKAk8e}<8$tL zcHiKt`&iLts}rMUMAT0h+4s$7Dk<(WO=&QPEu`3}MQ~jRStKBklrrE?015;NaJ@qJ z`}-uYsR`rSam%x%-n=*jC5!8NLn%nUsje*MOjVFUty8fG+F_hWl% zjlN)9HfP?6HpER#$gmWi`%`+=<<5E5l* zbiM>*@U01*Dn~XXHab@S^8VjGHT7Msku<-pEsw94g@dWTV5nVvvwE$m6=Z^C_vHsSLzWY~;g+{lu%!zqG z;!&u*LFvqTwxl~o4So3Ga-!^KSMN>!`;1vpEf6 zSnNG_;0XBeh2gUVj}Y}RuKGr}HKZm}BuGUsEfHULzf&)i&_irshYlqUWicbAP02Um z3-OfvYrPv6bpCp!bQ-6Yyq*6C8?UnG#O=@~hxlJgBU{!RPF$(YUt%*0`e-Q?Bc2^} z3N!_Q@WLgUWNzo5&c|-q$xkbEm<%Fx^}59<5aku7P-jMQAC7+Qv%t;xMpE>kNjV~R z_Q!{d)s(saB;zv@Vo?%}m}KZudykz}RWgS++Grz&P(g|{=zoea_J~gnYhME(mr6*! zQaV_{tE;>6J*}`tj| z*|*(1#z#4@S%F0S&2UclJ+5EtDETz4xaUgD%>MP`jr!c)dON$!KmO}aiwrzWS7L$h(TO)eA;qwAprM` zRO^6vR7fRk;wL%Tgt&<>1cHC!J}|*%_z2O=#5tS;%q9+yGQVo{pSGbJ!uRH8xW|Sg9zeK3}k~0TMP;v7h>J=J_=S+jm>73-^60Nx@MC77^;CNwra2A@XQvOab>OcFV9jNLSSGLnLH6DsmQukfFo}_i$DsTarn8m%!l0EfIzQ zp>kp@E1_0qD3-Bgv$a89meS+_Y3TG~@xr1(pQM2z7dyo8fh?$A*>7HuAhgIy?JR-P zjVfvuT<^~FHCUvZ->~keHvkCF7_>#>EX1rjb0{nAlvY%vJh*TM!C?N%Sg+u0A=9;UjaGTSdEQ+Ri!6`XR_{B*T#2tRF7hg_-tMFFQ54l;XJgL*yoS0lPfH|&wB+Zan$3GAVq|pYD$9Gb7 zXG|_LkzTwHP~$q%1?@=^-%Q(p@vT3Bwcbq70cq^NIh6D_1B+6w_&e2X%YoG+w;sOu zj)Oawr*s`>vCWJx|Bg3ZjXPu-I5DGRmkwPj==79^Y72(Y54=}(Fp64%K@LCwO z3^*QL$jAf>Dca5)CfY1k7V6aW(iW@zql5y^hQhGF5V2Qsa`|Psyyu&Mzh0%BMj4qh z-tLG{L}sgWf1WSd0(p6}CMR8%YS#Pp{ryrA82MtTRlf%Q1bnugRXC4LK7c}k<*Mu1 zQIFxVbVM0-Mc+w@|kFaravR-D1i;@2HdZ6n)fBbj|&P;t6tNa_m(PrEb0+B~#AG-_ zuL|3^Ulw#K;fSYxcj#zgvT?wamsb_n_QImdEr=}3>mrzIVUNvNSs}w9j)MHBi3UY_ zvu^~93vFMXDtZIEw!@lMedOv6JC=$}Cq6e5Z2_0fem389a|!PaQ7QTbHk%Q4SZe1I zvrjD%mn%$;Z5CcKq%=Gg-0G?n=Bplia9AWpvw7{H+gE&>Dr=L)GZ;2`5=zRLL{z~; z+RWCo@s{$cg(qf7D@9{QvuS}+A}l=za6HaxvVttRtY$C=GPQy92Vl7v*Wf>v*u9^0j^Z$*aVV_%9-ilsK8{F?sV!n zpsozkusy$gEMlhb?gJP}b;mBY`IO#7eKGCn>feh} zQnjQ>7c48nEIp02#i6F|IopHvnHMP?|hgOeH9v>$NQ;)`-lisIbdx-a33l4e=Ca%@238MzySU zJxEJrCRe*vkLK}_C)MmcVxKu`NeRN?_7E#&^yzT^n~>9LyEm6kn4+#V;zaCTn%eSW zrZ~rMM&2MxXMNqTBEeFid2a;V^m|3OBB$v?k22G|g^dJ?ux9EMsVT#)_aMEfj(j|h zQs8DQ-}%-*&BtHYC$q{=rfQw;;@Zxw(q=_aY6u)1VxEsfnRhlK2pviHVvG4DOlW)w zPxedk=b1`HH^J_@Mk+zxI*v*zUF~8dOeTRSl>#iZ+Q`-Vr?Z}K%bg2wXorG?^?bc+I8r!;BA5&4x%RmlWat=h!BkRg zZ%O?x?mX;%iWMK!Xz=#GUVuUXX#x};C!10o$9Qws_LCGhX_k;POI4a}PP_Z!nky7| zyUXI~BJYo4L;n!TZ$E1HZD$fBBn+F4*7S~RUL<+#FamJ8$6q-(Z+!=K{BV3`+EU7* zJ-q)Jf_gbSR8L(vve!r47uB}l7 zqtF?2Mn0bF%(11^*OS6Wv97i+uJp+QQEd8``pqFdT_%~x6FJb&65ST$y4STRmE&9a z;6>_mt(FPx-X2_8KhKR+{{Aw~{E65=@fxj`O;W3$fTs)~mLA}sD6Qp$3FbQ8!hHL2 z$82v03A7#DR>0{$lwoq*Q%+8+G2WNp+$n9Zh*T8JnJ6!f*^3vIs5hU|$o2N(5e-dY z+I^^-Os|UucR?fqK30GtXP~zYbFBiXIUdgNT>Vcj=xTQc?5^`--ZE zSuIT3&kq>`Ll-64=o*kX6Gk+-_p<*(7!VYJHZuRWCTR}Vy+AgNjzW$rSycgNqNt(T z{HZdg^L03F!+FMe!}EB*QokW|42x)HjFM>hV64aNW+yk>{VU<%sPCsFqRCVy{bWWL zjJ~2e3xawR$p3_u(H#ZSPsJ>p_Sf6=ptY=vj|`UI(`iX6XK_7m?6#+3~R56{A6rdzt* zf>ACuGFza#41pT)@5Mq>YM@qM3Iw1e<1z@`N9jQ?LyWO|mo3{CR~u#?{8n7q6cee{ z!!dX<#=vy8Q@Q?KrXUzs$>sk#Z->J^&QpG5u>VCK7>BlD^h%ou zsXn(1tmeBN?5NZ-h)T|oLdf<1GC4a3y0tXX;~A)vS5?_IHbQZq9@IUYZHA!5eZwk+ zf@Lct_#`BA=7bO|He^iF!B$XMTBB$kP+)DutRw~6Tto;*S7zgGSa|{xV$3RRw0dF% zw|Iz3HKGg6QRCorGWAYg+OF0t$}9YWG!46A48QIK3KNJqx4mf6^qgS6KaSTo+^_xr z2utapu5J5CU;3CWKIcWn?mGNV3NE5I#OMv{x{eWgL1|atz zEMdZuxp4%>?wRt^*!>Xyt$+gAyStnXxAz!5ztsUM8HVNU8vy6#gRH=Z1I0q=VqrL@ zz}E??z{`zxDxLPkq9#A6$Kl39k4h%|=tu(sJclyRCk4yEgNVNX{29?Dt z4VR^yg+}r+WF5)!=zwx`Vh z)x;t4WkX8)d*3Xq%*NhZ#+(r>8puuyDb1jX3&)?NY4F9k*^Y6SwM{7b`!}s5p(i#p zG`E%nCdDb8ZhNc;Utc5!o+ZK=zUzaq%P9}~0F#xqH6$A<+!*r+e*Xlce{Uf41lRY+ z0@qpDZgTQNVPRpYP(H?j-0ev7C37%Jax!}1s!Ni{g;gV&XM4Oo>teIG_z=v|w7%T+ z7C*O-&5!PvM)(DpZHAOs5hTtn7Z^zb_Q<0nVilbY|L;S-$A7=+v}!}|{XO|)Q!5W+ zG&N1e_-@Ou;QLw`@$g};ZaeaUK{}g>;S^9fEW!Q7tf+!?B9u7saEg$@ zb_!(Z`Jh{>F_c$uqp0b;1OL4YRd*6N(~@vMO*BxPmK(5rO^$72^6@eNlALx=OSg^A zlAE|T!As;`d39Sfl6Ggrr~;u8Fo}cd)kx&o|>Q z3Y``(zkHVe>ao3Q$;fsv`M$A$8mLU>2!v7eIagJ*N9v0grF_&hIhm~=gh8Hf$7D_e z9KV6o&>EFRwsQ2$ddT;OH@K_oPf-5LVeHl#1o5r_q3Duf7~-VZhyn?^v%{n~tc8E* zQjWFmG3Rosd<{jmdxgFxXDb-N$;Yw#vO&t=Zarn>Uzye91@;v0BM14YbUs;-|r@oaz4 z4}pOa`NwDi-el()f|;t8uS`vYZglym{oB@4P(F6we1rmZsMUL^L;ff6EHjLXtgN?p zI8HmWm!#NjJRX(z(`G_AzG75?PJ8%h3W@LS2CH>GyAf&+h=>))2L-OjK*30 z)PJ_fY@M5~P)i@&Rip0?5kUOo^N>|1lO5HZ@Y}B=5c>XnMP)Tr&-MV!QS4n#4~#)h zdo-K7X)=TLvxD}*b+fQwYoP1dXK-A-l-2v`UatEE1{c@nExbe;2tLj24x!upZx$1t z*?dw;PE|!;e*)yF?@e)b+8`o^ z{O)_5MO{#Ol^B-II`Zx1wvv?R3H zZ+iI{aj8g9wC5>nul5qS>xFI;!5SNDV}jHizQ?$x6`dxVU(C>H6JwA+z5*JiGkY7Y z?q3(lYrr8-0E8KV2*T8T9JJiKn9>a*Qdm=L_CMx6QU-@`t&Rz*Xd&s&x-@zyr^NZBVBqC$Li^v+lJkb6$;lRfmYAN! z*}vyGHKNqp%NTE9+ds81t$I`PIm_%~S?dH-;~$i$>gp?e`){39Vu*eOy$^>NqfHVWIPK}-JC_xD0nE6?hv&Zf0tD2_g>gSQ@ zI)dHxU}GA+t0ep}9pUS`F24IkK{P&hy5Z+p;gf@1`OEcn&o^|-)*Dy>$B)!v;^0^m z8ZSObQ!LU1DwAQvLy%lbPD`6Jm4&C>=0vbROfcC8`{Tb~o91hQFbedL`rFF#>ItcF zmTa+R+Su(;$RXkS#N_1A0Au@UBeZ|6__4{`v2s_;WJzCqIhQr?G4k}FI}T=@;ma66 z=En|clTs10UYTRD(DjHoFOQg-&M9^G``p^~-l3xYw+v6{{egivu+w?3Fydwj;V{2} zUt-vkTUH@MT96oSVT3DCTVGpA+L5yOkJUrTpP}mk0wO@e`u8t7z1GOdNx4|AJqJui z2FY-n-iD~dVyWSqCc*Wbv?|6JiG8z^#CfqWSMeEbmhWG~;qV{Uzj2z!T7v4o6 zakTAz`aPY)7Mx51`B$$I?9&omM;!EqV@)!`QFm#`@j@9vN$bJfLV zqllzoberkSKHKF@&EKSfa$BCqJ)PfM5FBbJQW^5{Q!s05nV?sfeW9ePq?j8)R)V?8 zoWs7_{3@FQ%2P}w}xea;nfD&->%KdEDNo>@aTU z)SJC1qT8h`goq)8_>$NG9E+z5^-68>T74WjD98R?4b17^eT|V;Wxx9lW6|PtZ8lI! zidTyUf{ebiXacTLuQ_8)$>U?Ea!xDhei*}w#e#>dAS=)$HUV@_7I}%pm9;ubn9Ikg z!RF)tk(3QzyYD=rlTj6F8luIyBTS@nR6B;B9XoqA67dZG@wvc#io;6lsLJlos^o|cnB1>;685B)RY zGSc_mi&7BNxFp`iY-3%{7t3Jk>RiFD87*vJ3u1l0sbv8^OkQpvwq0K}Z4LX$|M2cY ziaC#k%|>uas`%3p&Q4Q_=Y`GNT1o*Ye|@Dv%Bn*&SS?^!grLJXSd^kqgN#}!ywP=w z@u7ow%(;Irt>;2Q+X`1^ekXocmFqdXS}u1Z=wcFGbE5w`gms3_WW8(0?*oPASXSEo zsgpw{A6&c^|Z3vWkTs^Rh5l0i^pS3$^n)Kwzn3J{{6xU^9%GroXy4t#$fQm zmtyy~0ZQ{N>m~*rd{jm2>CtWH-QDtJ9+5<2SkwAvlN*p#cLCB>j;{eW&qqrbn2GRm z%T4gYvgigKnv7zjaEaPSc;qNqORL__Ik@EQU8n;i@%<&$L*#m@lFa_Qw=v$V_#})l z6gP%cqeh|;8t1E1WausV_%+V3Ovlz%)ai`SRCnJI_i1aH`JxHC2%rod;;6vy$`*x5 zZ}j!y#Ipx$PX0|<+d?hvTJFGN%hpJc`NbV0SW`IZBHzFj=4< zjuVEsJ#ahQKVl_Ne)J9}0OM@E*Y^&^iZHb&PD!BRCME zC0|_F1ookzDfl9uNQ~gVyrWbXUH?JVBjhAv{INz*KL1lK^#JCNid(#a>D^2)A)MFq z^xG+*$$neJ;B%P|7w>#*Eal+1qwOIPK??+RwgrI9qk{|!gZ@)B(D1sgUvKv>6Nb64 zMw96Yp!FFHH9cR1oEta4+g+#+{@rRiPta>Zz}WYE5}`&wac($}95Z%DxNmvJfx0pI zy1%>_7D^e(R&c>VqSMp<j}%hJs*b>JDcQH<4l{!a^ezEv@B`fwz}^#@mkuXQ6iGWURK&rwOk2Y%;FB z@Le@Eo1K&Yeu%59haz8&h$m6991gYM2!3&a?wcIph;!Au^@L(s|DDOTX_bpWSw>dy zAYRn__KH_G;pAd%u!$1|q!xpZ#gm9f^A^H_Ja9Y?sB~^;NGn203k7^Ju1XL(lc<1{ z$XB1YRcjy${OJe!uqxOPp{_MGRpN%zL`}rdUL)II0Mvjart_luF^EL|aO?}wZ18!l zu;SX(e0Tib6OB#q9i|;t!!iFI}`~;01`20fo9T6mF1MI3-W&5Sh6xjsjj?>qgc)nrYcN`AW4g;1w80z)er zhFnzSBJk)ckMFkPfH+|EdI#^a2@3ilkfYooH4$a?!tC+`SrRvu+@S*vFc+z$@-%sw z2LE0t4&bQ#Yq2n_p=X8Mubh;*#!=tUMOBe+e~nMG#15)knttP1+C?zu`wK9n$CTE9b8bz$^om+WTL=t_vd05cogVol>?YBJ_>ht zUCAk?O!fvC?i&I@dGnY8IS>k0@E!0JDVehuqwNXvO16q2EGM0LPYm@f@0FMAK!pP5 zhlpZ5K2J97RYHyA<)1cDCK-tjE?A;4SST^re9s$*-Cvynv&hd5@3+4=pZ;yWT3n6a zds-ZKN3}dWBOzc!C9-fmt>k92_yMliU`vdRrPBp#GM~5ggM>+NT?jc9nz6vd4jbw6Arz9Cmk@KMfYP+)`KSO>uiz7QRS z$^=FKe?MLH%QR5B&G=$iJcE5qwJvd=|-;7EynB0m>wQ!lYgdb(2I9^tuPs z+wScD`w5E+TKhC0&q*XdvV;TtmW==Bcw)S|;q`u-Gwm*bY~(Lo_n&X(Nht<%7t z*yVGQo?c}BOzW=1Vc;p9)U|*%2q^#^sKJTPFLi?r-``l7Q<#Xx?=dBio>Xj*G|m<^ z=2sgb012=r0IpK7e0OvBt^*aw0tu9Wk{^B2Lhy6D2=oUNgi7ucJ@dSXKwD{j{Ym(7 z&c!y8=JU1vm;0;8Wt!U`CC}##%gO2Z_UzoE&hiwJ?`D~m`!hN~s-Fu#pDMA3pC`c+ z;o9tu9P;PC>udM7Z$cd_E1u7H_y0P5=zZT)6EceHt<|9q4}XKEX|Akd2MaCE^k5Wx z!}pn0&i537t^sdnn5p;lA2z!+Se)P&g=*gCvh%!ba;IjP{!g>! zmqyi^n6LgytaYe(je%Ku$rvqTPn;Ph1_Q3ey!aJI>ym_l{a;xy`Br$ zJDLp0N30O!lQ9YEr>*hnYdg-JPBW|=X8FJlg&aWnIQ&ZUd|GWu=lCT5dOSP)IBNNf z4`z}dTdJDkd*A2*3GMzzul@!yHCsP<_Kt~qzy44$@Q5xg2a-38-EbzQ>>KS%5aq{T zA?@9Z+QuY3Jb;>-J3$JX<(7{xVSqVWk0J^GfV8hIf;c(hLvUE?9}zm`e#Mx@FXuoM zJ>tvs*VuzM)<5~YZmrFj#F6<_IJU)@rJ^Xymjr|toAJ@6Ha##x6kUrv*NKi`f^5P4 zL}ps|AH2sncmtWN)hl^;SAW(5< zl?M?L)0&W!yMKXmbHMCI;OMC86NyQHbOGy@?E3_RkaP*TNV%;JN|cbmgcH|z05u33 zDJ|&_lq~fTq`qb@P7_)ov-b=cCq|1h318%c3{)*M;XY#esT9E<@{|BjK(jxM8@XIy zK{M&x6=PLr#QmqTwFvxL5>YYZbcP7R{ZXUk=-DGm>~P1cT_V2L4Ur%4Ok9}IGSH&v z(u!;Yr4<;p4(DI8y`P|KV99O#aoD<%IgO3xR_>``i62 z42+D!6jr=;BD`jj+wFd z{CV=_S|TtrQ~$H=Vpm@uEGOse=}KeR+nZ2>y+Q9lG;w&p>D-@W%vjo?iHR=|FqeYa zC=QxVrjBW+n+bnUK7h8I^BmY#5nuoHVFswMAASTRtKJ`SGThY;(1l zrOgGO?A1gB+Qc6Z-embi+P#XlS=9Zzu?J;PurRq(OMBwotR+zfVqOV4(`esGmZcMW z0JVAEG##x{c3x>|+V(a!NTw(+FX2C%dB=wf6ZB7f5|r_q5Iy_c`g+vS+LDS2DsJu+ zEkm!6%1RaiQjC=bJ4*|Tn9j$H&Yhw71r^+o=kv}S`Pi^)0!u7eM(G&hHL-JyzKB>} zshDSw%`r<&QAf&t3n@dy1bN0mw`>uf`Q@F^=mI{YueiQp=Qez0a0G~xJ+U|Eb!upqj2zjuvxq0xIJjTw>j;p(SwZ-_y`AUOGkW5M0$k-TH zS=sij_t9BMC9m5t?xc_hE(P>ZZH9!Zmw!Sc;moZF8)F9P_G#n2Qx|frSV*OJ(RG zp~WRMHI?mE)fJIXh*IL@BQ^Qz86zJXI=Z*7dQJxevop7_u<6=DNJ6sxdqFWSEiHU> z&%)R^)l;DR@Q^T988)nUIF0k5w5-hZ_33x8n2Bi(&!WN&(9eYQJ@< zeMFz(x=etsc5<)E9`JWx`?pnzpb%vZ@$}?Jgx5M zAnb5uH8mNR>yN6yf+Hj)f{A?~g!Bt*QlJ1?Dj{7(Tij!0eW5$-;?aGoNuhZ2l9 z1;U2FMW7;sg5l6Zg2C}WmR8V4YpZ_A!s5WwEla6Efs)q)aD}~};81(FRsBc`%0;I(a4Ui~Q3=NGx zP$U8m3=x#GtE<77feS`{S!XMaTkfsR*{0uLecksQDP*+llzqFwn%ZcEHu^4L7^9kZ zD!$u9D0TQRb&vBoIWQDhQTx!?*nyq`Ul_ocF(s}Z_s$CjjTECC*VossZfrobnh{nX)z#J6*rt@^Mn95zZrZ13WL$U`m;CzG&!u3lGr-1N$z7r8 zcQwQCZ7_OX|?{@q=Y_9hAfXND{{D~~j3}o&eeM7e|9}8?`B_sFp-^FU zRN0CD>`w%p;48MX%&gM!KX5|TBJAq3i5owjzB&ikDRL9oKKn~U&=2#~(U+nwN?-3{Ye)<;Y!V-7C|r z8>ZTrT2e;s-voU%5Sl3BW;p$mDwZN|KFieFQ6x|a7FD?t7gLptd0~q3TZqyB-eHGW z;A)ao+d6Eoa1~Y|cSQ$EZ^lii7?dW)#|L0yPiqGr9f6$MN$1kJ^&~3jNDm~JKOb=N za0Pp?pgQNSEmF#c&WH7W=>7^PrgPoERQ3znQQSCeIyoubXD7DfU%v|wAwMHJ+v|M2 zPa(W6`oGk8*8x@#Giug{UZEwQ56^k$V89d6NMbcUA7MUtz`BPwd3p4Ob64 zMkW>(0kkoveO#4m|^6DYh_p4&3W_1ou+J|GU&aMEMXBCZ*j*bs+PgU=X36A8jxcK;2 zi)OJk9_K>HD3OGuq$0Ci>KfFuW|xaQ&yLNj=3sDKPR?YF8SU`IgsGhzPQKaB%l*64 zkLJfMjSmkZL3ujd?aM(jOJieyv%wgk$bhB1w50R5^<1c>rRCE5V6pKW>SX@6GcaaJ zy>?TiK?yGpgTh6HVCIdNeX`4!>&cyK)~h{MKcXs+bl?SR|9>eYA%l4>EhLiDKn?co zC{pB71b3Ze6%`i~Fet!8+aE?pv$}i~JxG0|k8AC)rHc)98;L*I_DEM!vL9Gv z0U`61e8*_?kYXg^;b+di0 zWCFX%(~Br%up{!A2DL_NgNv+o4=lIbspG*b7RF?>#b$_b5tJ)lB+%wM0KAf)HFtM+ z*MJgY8$x$g5od#BC&*m)<*7V9KYz8i-rRVf*K*=BXnT7)5xAXm8HyNdKbXAC=zMhZ z5h5!qGftxk&E2_G#EKsH5xg@tF>y6SmGiT>I7k{KOaOkPzkc3E4@QQbQ#=LmfjZe-MKusZi?yYBfL(g zu(NYZ&H15AOK{%aw;CUsOfV_!;1z3aN0Oy80u21&_9^4c>D!*KnrVg<`K9}GMJU5X z;B%{ORq^3}E{f8aPJiZ?(`j&{M#`wg=yBCXnzTa^M=;IBIdHtNz?nwLW-=e;Iq z3WSaG*lSU3X=`JE;uh@t57O^;*O_Ib-`sJG{+4P6T-AMTJpWi;O}I_77+~%EJ7iC% z*>@M7jIuC$x?z(ze#~_-&?Os)_d5kl@PqI$@h85&>LvavqFha|_wrO?%xQdm<6tp4 zY>Jwsd0fH2_2(!#q6n3Yl9W<3#g%-NhFg^O6WksdKW!y8yvm(ujx-ZW1y_#9khN=Z zBAp-)vc^=>@K^m7y}SGiTS@|Z=~yBj=FpUxE*V%~-693_Myg+3T_&^OY!|1*7z#Os z&jIjCb-LajCQ_YsvFo*JFMWjVZqXjj#CRAABWDlIDQjR5I4I;n+bt3&!O^ee_XMBF zX&9`Y>N`5SZx*n|iDjp5SG{RDTZG0#!jJ&ka+O%@zcgcgyY2@Mb}?Rfq_1* zg8eSSUNKUnUcuuTjHOr19G~5>WD7DV*>-lEG#UhxDbelNNH#Zkiu|y40w6| zsHC5OaY>%Dn?8e=#>K&RxuMkB3#OOF8%;Q2A5E>DqW}aMLn=5@q>ur;keP`|05JK3 zt34l5gt~WkL3Va}bSx|dMMddq#p}i!9R@eIXgJ6v>RK|ZZVMH=dwXhzhKf>B2;c7i zQea-F=;{su9Hwax@`)!4S+RKJlLv{hlT(1*%IA1_8UU{8_uyd5k!R`_H(ojz0>MW{Mh3Vh)F_2{kridIv=rjf#q%rhoct#J7}}^lwq!gc zq3ffS!*b=X5<7& z$&;}&g}#Sx#e4a5NQO%JM8(MG({Y%Y)kQ^lUn-8XbK-zLMzjBC7dL}~*&}Bd6PcOm zQ&fDw>s_As=p_sW_k$AY|6RsZBjc}MgC!^>xjur;%}E+p((qdl4<-!ASy?fTY>b{a z`T@oswqG*jYr4FQ41Gi%2M?F5l?+mP5f*Y7 z5s}7^$nRv#){XZha^*)oz5z^R#?TXcb1Vg@)vD5}s1&xfc1Qst;*{1lkIo+w{)?fM ziUUo#Ar)X_e!%5TwXms+0|kJa<3T7ovZmVh>b!xN_zC5vghV{`JY`JczP{*}p26x2 z{i~}?tsV}=Kglx$zuirJD-AkZSx87r>)#*GXm;EZ=4qg;gVhj@a>@NZ#8jS9TcZH3WkyvV9cadH&`aTN2+_z&CmWyU!1{01l3Pr5-N=J-uvhdIR_X#)d(+~u#s;U|_ zx|jEpJg5EJy{f+c*whqexI|zyF}JFb5yGNu2xg!%orH`G5qGER1qaeC67}5e3xEFf@9)P{ z5?oVSUA~?+e|Y&JjyD3YoKhc|TyF|3fybxGN2z0sEON`aCpfw}MS_Fl%h!4keqv+G zx2WNBNWS&Bk9>=LT8hNfjDlswVq_JfYYk_2CC0@6SD*gnaJtn`{%55!b$7ZHmN?=} zHmwPHni(S3${L-eK5w*6e;6r)MIVa+w6y6D!Pfuq@n2l;(aDGTRvP;*SicaG#CK04 zYJZkX2CcOB;-Nycuw*;K55MAZ6RQ`yMjY$%pSU`kCN(rn0!19Q;Rg|68~VGJ({plL zTRkO8#}QG6Y_3C-rtZY+CNKBX3OzWEO#wwlwVEk8Ndr#yPnoG_qWD_P`0$#?#upxv z{TD9;mXshphc!tvvrm>2nG~FyiT}PY1B3Ap6ap+r$mrQVpnx==cYH&F53*gV4XLSN z*JmLpD>EU4XZ>_)v78dG=%Cv_j=aQ`m|7IFz^}kVBANg)^gg0S|Ky$A(&7!0*^cI3 z-+Z{-0Zvbg&iJgXp%LDjJG0yZ2@Un;QULq-03WA9UNI&2Z|&UJ{2x9b1SvNY~Rl1Ppgj*@Ybz2u#TzmBb|;^S?wE% zbyT!0;mM#&NR?>*{P|BC0?;yC^spciauJTSzVrKBtB)CgL`<@e-Aw{C&du8=6t)f!7a&=volo`Cf zaaYt9IA_Rr2%hv{QSr=VPq<)u-v@-a+J)qiUmuM_lt|Wd-;Kd|S6pLo)nBI6VS1-9 z#k!AB&5kKJR(n{?E9|wgSiXOHKT)MhH_3=37^P8DMycXk@HN*)s>VMpp>N(47o02A zO2T44P%aeWQs}M)C6uBne-s(-c)=`Zb8pW;RJ0@Q9qUT6IZdE-@W!h2y{4|FG>$6v z6a2o;+NT=gLN#8J>z_J|g@%rHDUYGTqo`FKrW^_9-jXLayX<3{)FyEEi#9u#iu zrzH^YOb^papw-dc9+>+FF43}A`hvBmfc?M#d}=zgr1bB*OF0$|6MtS2t1WW+wQ%A3 z{|ws2Wl_HIIhi$+oUX_(H;FdsbIGR09q(uJ*EOAIYtB~=_wDE!FY^b0M~ue;qK9x;?aPrXAo zE*OaG$LtT`)b=Jr`z_;KXZb^_wWI=7C8<+{<8wrI=HA;ko93N6y|}5Rw$k{JM@5n= zT(6~T<7mn#6J+P&;o;2UA{ydwp5a9hQ6+EYF>a|j)KWU-s9@9>TWxAzeWsN)B*W!L z6Gy0At#)T_veh|{Z)Xlru_G5loyO@O=F3Y>tViTDi+Xx7g!`^1g_ZR5h|~A`>b=ua z)B9@8N95ojaIrN| zsZ&d;PD&u&Uj-%Z5$3d2r3yd1vU2e8bvwN6dt9)>V~HuNt4nMYQ@jpHDY-$S($Qc|=YYi_gvXL^}ctHO+?86Ft{k;F```@*M; zO3JxV^Sl2A5u##8f3b29?#++&4UCV+dhr!zNdX4n@$l%lIJxIh;Q}4qkmbR|8Y0Ev z*{AJ;Do=L01HoA=h+Fmz@s$H^IUab2iH(-Gx-kZTN40fzfHVqRB#hP0oZ4EShTnEw zwXXA38zM$V!a(8YH8uUXJt3}+vP%ER+5G%>&30`j7-X^NCMO7R!=hZF*rlVoRhN5s z_p{}$r`wa%w6re}F#*R7blnAfKpO00!}j^BcI$Je77a^ac{!m=e#)*5Q7t!OtaFpY zxpol(#N~-TPvM=Npd<*S*6-c7XNwID4b9cVV|Hq)3mB%hi`4;nd8PpAYW3KVrHmKR z(1?hP9G;v!IDdaLO1puOJ7Q~}QgU-AR_HYrjc&9I4G(XX7H4k*8bFgii>$1y=ilao zl9H0Hoy%&coiB=6d?8?+xjz~;;8A#VGG8=cdaJ47&?+gJslKs%Jm!li{6UqrHUuFE zn2n)Iszk?Xq0~RDt=3oZ8G6&7hLOfjE$SW`Ld;eEF+Z>Ae!AFg*SI$EtExlR(2%sn zo{fiRXmOEn`fHM9&UeVmi;u3Z?pG@-6CWQE1(&J$2Ds5$01(1L1H=w8JvY|{D14TY z8Q}P=tPqn!+x52akPx;MZz<0gMvpr1HI3_Qr*rPFjDqYB{#IU|TL->h20Nt45rgsr z8x(8+A-<@!HKVMo%+)#M(;Jfv_Rfyk=|*Sl)06kVi2_K8(je@y@o@lv(=#$s;KtV! zcxO(Kmi>}FJU!igdA#rCKaClRNvKsN_Ep#PJ5gOY^`+$sG%j;Z@vi7x}elOk@tgkxjjqY!; zfLy=b@E270t5)}Dj$Oup0!pkvd;|n=bQF|px)FHQQd~7PHGm~6<_L|?&EWznNJ4Tl z0COZL11gKz6mUjs*-(SR!;ye0VOK~5G>rLj9dU-_o?0eg$zOVs0NgAN{hF(nO)EwrS!5PS_HC@IH1UG+lY@iI50rt?fsS@ZJtneOv%9^!1P2l zHvU{vPA96NA(o2^sHbp`9FigS`vjD*L0Ak7*Ky`)o?_)B(6Fh7&b49y$W_r*{o-*C zRn_huYCI+73Ee0xd_ajyiUKk^mJ5M^;OV?!dsng{J^6F0QhwYEM@ep(RV#;{+iBhQY2_ioEP(^J=@ykyTkH z#B@oV>2L1+43A*@wf-q8N8_f2xp}z2#sXP; z=H{S-g4E=_@*iHEEQ)AlX!6Z1EC8fDwz!CUz#1$<|Ls8Bzxr$0_2v89MFlqd5GAv;_qFlgBO~U@e90zt3fkxqyMifzF(?$-_ z#FB-JoZfZL{z7gaxGn8bh0fH#PVj?+0Mi(sje`#$rhBS6FmsC!KBSJp zo&M!b;8Jdqu#5g;ulPAJ5r@S03|h>3YmLFb2U~(tC9oSaG+rdJxXJC_LRM~6TVKDR zq9QtyfE7D>z;i#%((5ocjE{cwl7w z{`SfUE0Q2WKkyS%T*)TA40R}V4l}AajrPBgAC)UR*wDCe;y+way{0asMgjplo{C;-=k6s@S zSjG}F%w|^gl^o8YLQQHd6kz`R`E%G3W3@cClK?VFxA6WtPtU-RS5y=l6N7GTZSBZI zGD>e+%VZ>omNbKLbKI&@HTD$0KGN3WoC7n|=A2V|MZwaz9dYYns@eXu>W5PKWWb9f zw`@zRp-&;PKxrc{KHQ7Re<_u4$D6*hMjQYNH)n`UJRtE$3JqG84c{45y0{MNO)cs< zL!hCj8_KP!Vy*b4P=sfkLGJBr8VIzy<74Zkj_<@Z+DXzNF%1p8&MU@FG0OM{Oc%IF z+*EdmH?dx;!s4?zLBk)X;hAEC&kmh?|H1ueGU(DtIIHF!t}*Sj@++WLI(R;U(XRD1 zeGf&<*EW!rU@vg<4`kp|{=x2M?g zc01^GHSA|>I`R;Q?2kEQfq_Sz*tCWoD)oubf`&T8r6j#?PF^Ts_b2%RiodXSXkqz# zzd_BEN(JZKf&@Eiso4f4ZR?)g~|hLA`+*|S#6%)+@!>UoSP zyp^O;p$zITm?q_jr@x1bQJh`tl zmiUeNDOG~L+?~(-IW#MRKh%y68vRa0h3?brc;<*&J=pTyt0->p7UTocq;a^ZhbQE( zo;&aHI__*@{dq0V3HTCty97PVuk|{8QFw`h8XQEKR64a&KItFb8M45K!}dsUd~^II zrQGktUzU#dTxC|^mB?;M|HlR#FSC@!f?K*In0s3DovaomY3#-uVuvxsa2cZaurx}) zJ>ad3A`HT1hs1zrhVPh6b+EUzv06&8qtk(*p4=nGhSqdl$v-?iypJIK;1JyFgig{F z?e~~sDNSQ>VNQ};&J<)mV``yUE0Z7r+h~^BBSvtU8Z*h7KjbtrGV)<)ELGeslLptx z|036lwRuSkRRoE#>y(QLi$$vOlP3vEDuA^?BYD zpsStE;cp+3x3Kt;tqg2%x{Wbo2ZQne`A>@}5d`3~>AB5)Mx#eu4UJ^-&CO9M&!@pb zI;NY8e%4hv7Z;d#$0P#3JC3ZZSws`P+qVmhPB9Y`3f7JXWZ~x}BGVexmp4gV-Z4wk z3b9#r28NLf&sBkYU<9-};>JojJ`4TKq}t1c>e4fC$3ef3zd~8HKur@8RE=tFEt_`beRNDjVP#jdvFlOcQ7{>=dB;Eo zpDkh%pNwU^GH<=SvNAk0WIT9hJuonsmKlYK9HQOo&fHQtyR?KP0^ka$Ve<$8T?1Ap z9TU@Tnq_t&&>*XPZ?9e5v%v=wb^;e&uRiDBHu7_G1C)HW4e{}dJ^-T=fcG^P3MieI z#IY_%Gm-!*9{#)5%IkSSP3reDYHn`sxI2XP4>ZnKtN=!pUv%qvM`V@XD>neh%x4D_ z>dOsAjb8s40Z>a(QxpI9@87rtt)(SHTlc=_9zXg`0TkvmDaiQ}_I_apym+_6`<(+j zA78}ESy6p`lEcg8d;gZ18F|&W*!GB-FcE|}kh~ftNzAq@-!xaUG$=GA!z;(YxuUr_ zP0zkLM6FoS>3EJFz=@0XRye?z@NBOGL|(_I8=x~X42_IXQuT^k6oqLsg%(+Wp*CYU?Ck3ui0Z+>3uS*W~$LP!A_k;Idqqn_{ zTDKE?z$#<;7qDSq*p?FZhB){=Phvr%pKgQ{NzB+^-{W(4LXl%B;9n1v5;;3ZDF0zn z%+8i-WSEL(^7dw_`Tpz1THAlhsSS>Mjv!v;y8J)i&tirPz_ zCVx32$9nmC?w1o93g2-V?eNdl+jd^U6F}{S<-igXgB0#r>xI_HkBiWe(0o*r1_9PL zB^6cB_O@wDD=Yh1$YTgBfSwH&WI))2p`tt_UuLU}R;z&dtwb zBZnNGTywA)E4`Ne`o+8Ei&e}S$*lJo2R+Q|aW5q;Cr3&Jch#QTW8*t_S=rUvxo=8u z7{>KKUs6XWyuNSf!;z}(-IHt&wGISgb3-2i4ee?`i;Miv+~=nf`x4r9)2tZLD>;&t23@PzM~8ZL=a zRg-U6LZ`*>vv}`o+ru^r3BP+_zX(lDQ(vxl7$GsSiFuzCk7^$fIr+EZLxdj_9k!jD zFCTsUfqcPL+N4h?K%`{lnw&5!gmzKDP9_Ky`0i*bG$gOzdl6q?-Ik8(!B=bEl#^a0Wqzm+S>$FDTA z!9CXbav}#DPsq)MYx%Z+c=Wf2Eg_TFC7?LlJMA)@t+zKQQ*fcTCos{`Gv;rly|;Jh zg|{WJK21D56PB92CUQE2ZjOzlA06~J^N$)x6{1sD^am=1gUnw%RDDnE z2w=*b;L*_ubRY7vfPH)c8dOhVx_Cd@K19iuafPW3e$y_ z&;$f6p5)-Q3%L{LJG`(?FG(?FYpJ&%sQdetPJEd_jxW}cXRNW~mH;)DVN+WUn|3%3 z{H}x^f~zpblzw+^gDlNKucE*J4zSKh6CbYsqdL8wVtdla3T3t8;_^Kz`s9k&n@KEm zu!!sXQDG1WyJ6tl`5JLaWu>XDZPbJ!86eNv=pi@1-su6=Zg#yt?q0ri!?n`zSy@Y~ zYiNi^P0bK!4QZ(t06mgcIwwSOI?(eZ-B5^HyKRVU^eA_2Prj*L7SYPt6!tx!ZOVjR z!<5*8`)ObEjmop`uKpY2*JAhM$kiA`moi5hI zuQ+Td7;TUnq!g`hd3scYU5i?rBI@O+EF@HaljsdHK7szn#+&@oqMURy;jd69J9Uk%+7z91|__i6c%Dn^! zh{W~uh`Ad4Yb2le8)m0@B}PiN$KfzF1x^dAl4A%=0*Pe!eai3m0t`ASG*flKmdg}7 zhSPQ%nV!#r{;-JA9TdqO6fg-y>JZ7)^mG$*E{t7S=h|;WZT6w+BYWz(|xW1pLyXhK5kU8l2}^U=!Hy#l2l{YL>OaSR+@o!&)2a zN=om_r0Hcx{MvU@bZ=;d4P7257#VLqRdyCkNMS2Ejk@v_w!6>VyJSzX*l2RK0&GkwW6$mjm6goh1;5w2mvO&0tk>SU zl;S*V^a}^Ky>(aUxENWLNKIR8_ltm4$1`snEzmtndpvlQzXC5zS9|d|{MB7EncC}A z?UsiGS@>ze=?P)S+(O>z`7Ecn_yAiW8f{Kp)aaZf0hE7&#K9Tb{Qkz@^m+$Wd-Qca z*(+;$`Y|1A)o!v@%taTBhtvKT5kA59Ro@k%T9;ZN=h1a^H+#C&9&&ohbaizND62c0 zjDt?i0;kQt!%t5Yl9H2Mj#SBh|0g=%KvOLr4VTm3)rA=#$(mLP_u1a|3ncf~Girb| zW63QyIN`9h5w^oB@dnab)vnMoA=S~wglcakcM;b4PSo)G_te6-fQiWOw)(8sQ{wkm zujlXnEl=K;!ODcJJSy@2k)PNND+7x!VJ7Q2OHbJ)D>%;+2CiOLGZdB zD)YINd}!nkQu4hLeR^(rJhc=ag;eON;3i9veNVcqK{;KU?XeVkMdDbEsXw>`0Vvex zL~o;@o-4gA@pvk!hr7m31;7#qKIp2~ zfdK$&M6*4&-vP0en8H?Sa&r?CNN0HfX$>HJL7)QxN^tAp5(mg2)L2fE%F1QBS05?- zutEL6O|%kH;Ak~9p5uGMQ_GZ^qok^d+_>iMe|P8Z(*c#ja$9RP`vvf7m2tsKD-BIe z(mKnq8L7Y8Ns zm8x5Nc@v|CUOc*4Ta#!*!i%iR4O;O5!e&CK4GCE}YnfKMY*9Y*AK-D1O1<7EE(Woo zrX4j?+Tys9{n6k>MMuBTdOr$7jcuW473?{GAckfNl`#PW0m(3r=M6y6ZkgoK5_2}{Lf zZf=LLw5{v>!(xw=sYS!hE?N3*iwff6XuuHDZ<(9CG^4$E22wSYuC6h;R?w2uKuQ?V zzA+LQF!31~y+A}_FeaNEv$RdV#sx=ogz+m*=iMKEz{=b=${`k4xsC&|MWKS0Xd)9p zaH1V{n}ChTxhE!~u+R~2S4lDxicSA%m|=|TzerSP#dIyYEQTWU!glL($000>A}wY#RiXA49YR*a5hzBA8tMz7QXVPK3Jc9kz5A zcAx#3wbf*=!hp(C+Mr2ZYG&OTxm!$K5@!ik_ahi3vI{FYjTCr~qkx30+uB z%s=EOrK3Xx1~&|QoXl5vw$C={p8U4Li0|+qzgF8T6AkuTyBEO`x6l~Hx`0@gs ztNb-hfr|van21Z2hXftigaN3O_4Qow@mn;>GdkL-Qrb=|3p5W+oBP&2P=!q;he$HO zW`;z-x&tDeRK4w)1E2Z$WEqn4YHJhP+VlaMq=V0r5?NYG55x`s`|m%fV6ogiWQdpu zuxG@~%nXPg0i^Nh{G2vky4u~2as9}v$P#6pq^%|b1NYcQY61}BBdwNXLNd4;Irv+L z#_9=*M}ZI!Zm5a#{umr~IIf*t#*cpNo12@OCc>iJT&$c)Kw-rU34xoNo2v#o7|>MH zi)y^CX)+ZN49{`F;6mU5KsrJUQ7y+$Z@Y|h^bsxi^V2m+1D667#AL3sm^+ye$V8M{ z6xACqrp*V5V^=`1Pf4?7J~23r8UZlCW$HKBsQGuSzWYNooioUd;Sp4f5DxWlbOcd`tgOQd3@p_ zz{dQl{0@~&ldiT82OSLE`1yQmCQL}n@*5d;iO0GZKaeQ$6c{)>qVPPd--wuU|o2yZv+;9m}s@-h# z_|#>AicC3W8k%&;E#=M^x-i_BUCE+Yi<;b)rK6_qS4u6Cq{9X5opeB^`649+c%~Gb zv%M{D6#$S;%*l!E-7*HI#XtL81{>I_0Nioj>Y-kq?7no5O!Gp3DBIUki0CSwRws%V zFyefHv?a)mR8-pE*Qag_I7pAYIMF(FP-Z=EvbnI%GRID6sf$ zf!%E1zpM4_$N-zELPNg*Is!?k2|%u-#KmEN^wiE++BIM_8XwXatf4$Wj|ZE1X^VC6 zCW|os7|_ABf*$?xQzpoGoMKE87ap?*mVP1oSQmw-z^r73ttc6dCw?5As~KZ9frYFQ zbqOEc3^8mq(pM`eJ9ha&GK=z8yNhD0Q83svDMnXw`9UN7zPSJzi}frg%8WIvi)(eZxm`KWnrw5Kh{ zpta#@B=;Jm>h$fi8I$9QUE$ZVk};CBT$%qP@q#76W3ZjIM~@ozTdA&hU%G_y9T2X&pU1R(SNo>{aN;LZSDK+ z{;7zHdaa%#r@?#63yA}xZld5A*B zX8^y5i<(fR_jUuQZEvsNc4b~xMTJ5`1l@d17AcQu%$3+_Ned3wH7#P=(UIU&!I={ zHJ)5=M@5ghz<9ry1hy#DxS#0)r0${E&l`e5z;}2~X0dLR)R4Zu8jV2)U%Balf`o}( zJgKLDdQ4OLE0vu)S2;-`BZAlOjgp$08tCr8=j|1|UyWuOb)QsL_Ae{zGgSdJy~oGL zlCswlU?wOQ2c4eE^M7092p`-5skygH7&KN(OoMyMGGxeF;DuVCp{&w%5ZGq}KK)hi zyTl<#%gi+O72Q5v0yORy*uakjtmrP!XDa|I04j6)`VmOw$}1?;IcylJYXF{BEO5!3 zfD985obBv;c;JbQj0Eb2JXn&AP$YqC{mb2$LJ)>!_YV&gM)Z9sY^-4Q01&=NFqZQt zZHmlgF5|*PlT!(-*_ol?hPdEx`&0=tWUpop`;@3jGARvMmXw}0B^u#L5wQURLlo<^ z=r@NAd?7<G91HM*$mjk+zlq6Ae_QnH8Eso z6q~wDl)Mrh&Vz1sNtNr_l`^h{Tp#3;7qyV5#-n3%pxP`k7qmMx&Hs!?zmqLPiUQ5J z{+t5adYN4%wOz%X!6vR&4))~gR(4=01>g<`FS#1nk(`5#<3Dn?&wN}Qd~7`A$_nI? z66%ZMmc+n`ME_1ybFgsrFmVP$S=u|;ftg**oWWpwm#+@4=P;c@z>}b4Bo!qp#f$_0 E2OHMwVgLXD