From 6935d3d78beaafc142214b55953f406451299e00 Mon Sep 17 00:00:00 2001 From: Claire Phillips Date: Tue, 23 Jan 2024 22:40:43 +0000 Subject: [PATCH 1/3] adds the exposure script and demo workbook to the main repo for PR --- intertidal/exposure.py | 1673 ++++++++++++--------------- notebooks/Intertidal_workflow.ipynb | 1448 +++++++++++++++++------ 2 files changed, 1868 insertions(+), 1253 deletions(-) diff --git a/intertidal/exposure.py b/intertidal/exposure.py index f808ab4d..dfb83752 100644 --- a/intertidal/exposure.py +++ b/intertidal/exposure.py @@ -1,30 +1,34 @@ import xarray as xr import numpy as np import geopandas as gpd -# import pandas as pd - -# from shapely.geometry import Point -# from shapely.ops import unary_union -# import sunriset -# from math import ceil -# import datetime -# from datetime import timedelta -# import pytz -# from pyproj import CRS -# from pyproj import Transformer -# from scipy.signal import argrelmax, argrelmin +import pandas as pd + +from shapely.geometry import Point +from shapely.ops import unary_union +import sunriset +from math import ceil +import datetime +from datetime import timedelta +import re +import pytz +from pyproj import CRS, Transformer +from scipy.signal import argrelmax, argrelmin +from numpy import interp from dea_tools.coastal import pixel_tides, model_tides from intertidal.tide_modelling import pixel_tides_ensemble -# from intertidal.elevation import pixel_tides_ensemble -# from intertidal.utils import round_date_strings +from intertidal.utils import round_date_strings def exposure( - dem, - time_range, - tide_model="FES2014", - tide_model_dir="/var/share/tide_models", -): + dem, + time_range, + modelled_freq = "30min", + tide_model="ensemble", + tide_model_dir="/var/share/tide_models", + filters = ['unfiltered'], + filters_combined = None, + ): + """ Calculate exposure percentage for each pixel based on tide-height differences between the elevation value and percentile values of the @@ -38,27 +42,35 @@ def exposure( time_range : tuple Tuple containing start and end time of time range to be used for tide model in the format of "YYYY-MM-DD". + modelled_freq : str + A pandas time offset alias for the frequency with which to + calculate the tide model during exposure calculations. Examples + include '30min' for 30 minute cadence or '1h' for a one-hourly + cadence. Defaults to '30min'. tide_model : str, optional - The tide model or a list of models used to model tides, as - supported by the `pyTMD` Python package. Options include: + The tide model used to model tides, as supported by the `pyTMD` + Python package. Options include: - "FES2014" (default; pre-configured on DEA Sandbox) - - "TPXO9-atlas-v5" - "TPXO8-atlas" - - "EOT20" - - "HAMTIDE11" - - "GOT4.10" - - "ensemble" (experimental: combine all above into single ensemble) + - "TPXO9-atlas-v5" + Defaults to 'ensemble' tide modelling. tide_model_dir : str, optional The directory containing tide model data files. Defaults to "/var/share/tide_models"; for more information about the directory structure, refer to `dea_tools.coastal.model_tides`. + filters : list of strings, optional + A list of customisation options to input into the tidal + modelling to calculate exposure. Defaults to ['unfiltered'] + filters_combined : list of two-object tuples, optional + Defaults to None. + Returns ------- - exposure : xarray.DataArray - An xarray.DataArray containing the percentage time 'exposure' of - each pixel from seawater for the duration of the modelling - period `timerange`. + exposure : xarray.Dataset + An xarray.Dataset containing an array for each filter of + the percentage time exposure of each pixel from seawater for + the duration of the modelling period `timerange`. tide_cq : xarray.DataArray An xarray.DataArray containing the quantiled high temporal resolution tide modelling for each pixel. Dimesions should be @@ -73,901 +85,738 @@ def exposure( - The 'idxmin' variable is the index of the smallest tide-height difference (i.e., maximum similarity) per pixel and is equivalent to the exposure percent. + - filters = 'unfiltered' produces exposure for the full input time + period. + - temporal filters include any of: 'dry', 'wet', 'summer', 'autumn', + 'winter', 'spring', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', + 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', 'Daylight', 'Night' + - spatial filters include any of: 'Spring_high', 'Spring_low', + 'Neap_high', 'Neap_low', 'Hightide', 'Lowtide' + - filters_combined can be any combination of one temporal and one + spatial filter + - if filters is set to `None`, no exposure will be calculated and + the program will fail unless a tuple is nominated in `filters_combined` """ - - # Create the tide-height percentiles from which to calculate - # exposure statistics - pc_range = np.linspace(0, 1, 101) - - # Run the pixel_tides function with the calculate_quantiles option. - # For each pixel, an array of tide heights is returned, corresponding - # to the percentiles from pc_range of the timerange-tide model that - # each tideheight appears in the model. - if (tide_model[0] == "ensemble") or (tide_model == "ensemble"): - # Use ensemble model combining multiple input ocean tide models - tide_cq, _ = pixel_tides_ensemble( - dem, - calculate_quantiles=pc_range, - times=time_range, - directory=tide_model_dir, - ancillary_points="data/raw/tide_correlations_2017-2019.geojson", - top_n=3, - reduce_method='mean', - resolution=3000, - ) - - else: - # Use single input ocean tide model - tide_cq, _ = pixel_tides( - dem, - calculate_quantiles=pc_range, - times=time_range, - resample=True, - model=tide_model, - directory=tide_model_dir, - ) - - # Calculate the tide-height difference between the elevation value and - # each percentile value per pixel - diff = abs(tide_cq - dem) - - # Take the percentile of the smallest tide-height difference as the - # exposure % per pixel - idxmin = diff.idxmin(dim="quantile") - - # Convert to percentage - exposure = idxmin * 100 - - return exposure, tide_cq - -''' -The code below is currently in development to apply custom temporal -and spatial filters to the exposure calculation. -''' - -# def exposure( -# start_date, -# end_date, -# dem, -# time_range, -# mod_timesteps = None, -# tide_model="ensemble", -# tide_model_dir="/var/share/tide_models", -# # timezones = None, -# filters = None, ## Currently designed for a single output eg winter, low-tide. Needs some reworking to consider multiple outputs -# ): - -# """ -# Calculate exposure percentage for each pixel based on tide-height -# differences between the elevation value and percentile values of the -# tide model for a given time range. - -# Parameters -# ---------- -# start_date : str -# A four-digit single year string, should match the query and -# start_date used for the elevation calculation e.g. '2019' -# end_date : str -# A four-digit single year string, should match the query and -# end_date used for the elevation calculation e.g. '2021' -# dem : xarray.DataArray -# xarray.DataArray containing Digital Elevation Model (DEM) data -# and coordinates and attributes metadata. -# time_range : tuple -# Tuple containing start and end time of time range to be used for -# tide model in the format of "YYYY-MM-DD". -# tide_model : str, optional -# The tide model used to model tides, as supported by the `pyTMD` -# Python package. Options include: -# - "FES2014" (default; pre-configured on DEA Sandbox) -# - "TPXO8-atlas" -# - "TPXO9-atlas-v5" -# tide_model_dir : str, optional -# The directory containing tide model data files. Defaults to -# "/var/share/tide_models"; for more information about the -# directory structure, refer to `dea_tools.coastal.model_tides`. -# filters : list of strings, optional -# A list of customisation options to input into the tidal -# modelling to calculate exposure. Selections currently combine -# to produce a single exposure output e.g. winter, low-tide -# TODO: rework to product multiple outputs -# NOTE: do not input multiple temporal options as code is likely -# to fail e.g summer, June -# timezones : dict, optional -# For calculation of day and night exposure, timezones is a -# dictionary of paths to relevant timezone shapefiles for your -# area of interest. Defaults to None -# mod_timesteps : int -# Frequency used to run the tidal model in numpy timedelta64 format - -# Returns -# ------- -# exposure : xarray.DataArray -# An xarray.DataArray containing the percentage time 'exposure' of -# each pixel from seawater for the duration of the modelling -# period `timerange`. -# tide_cq : xarray.DataArray -# An xarray.DataArray containing the quantiled high temporal -# resolution tide modelling for each pixel. Dimesions should be -# 'quantile', 'x' and 'y'. - -# Notes -# ----- -# - The tide-height percentiles range from 0 to 100, divided into 101 -# equally spaced values. -# - The 'diff' variable is calculated as the absolute difference -# between tide model percentile value and the DEM value at each pixel. -# - The 'idxmin' variable is the index of the smallest tide-height -# difference (i.e., maximum similarity) per pixel and is equivalent -# to the exposure percent. -# """ - -# # Separate 'filters' into spatial and temporal categories to define -# # which exposure workflow to use -# temporal_filters = ['dry', 'wet', 'summer', 'autumn', 'winter', 'spring', 'Jan', 'Feb', 'Mar', 'Apr', -# 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', 'Daylight', 'Night'] -# spatial_filters = ['Spring_high', 'Spring_low', 'Neap_high', 'Neap_low', 'Hightide', 'Lowtide'] - -# ## Set the required range of tide-height percentiles for exposure calculation -# calculate_quantiles = np.linspace(0, 1, 101) - -# ## Create empty datasets to store outputs into -# exposure = xr.Dataset(coords=dict(y=(['y'], dem.y.values), -# x=(['x'], dem.x.values))) -# tide_cq_dict = xr.Dataset(coords=dict(y=(['y'], dem.y.values), -# x=(['x'], dem.x.values))) -# ## Create an empty dict to store temporal `time_range` variables into -# timeranges = {} -# ## Create an empty dict to store filtered datetimes into for testing against mixed/semi/diurnal tideranges -# filt_dt = {} - -# # ## For use with spatial filter options -# # #Run a full tidal model for each pixel -# # ModelledTides = pixel_tides( -# # dem,#ds, -# # times=time_range, -# # model=tide_model, -# # directory = tide_model_dir) - -# # Model tides into every pixel in the three-dimensional satellite -# # dataset (x by y by time) -# # log.info(f"{log_prefix}Modelling tide heights for each pixel") -# if (tide_model[0] == "ensemble") or (tide_model == "ensemble"): -# # Use ensemble model combining multiple input ocean tide models -# ModelledTides, _ = pixel_tides_ensemble( -# dem, -# times=time_range, -# directory=tide_model_dir, -# ancillary_points="data/raw/corr_points.geojson", -# ) - -# else: -# # Use single input ocean tide model -# ModelledTides, _ = pixel_tides( -# dem,#ds, -# times=time_range, -# model=tide_model, -# directory = tide_model_dir) + # Separate 'filters' into spatial and temporal categories to define + # which exposure workflow to use + temporal_filters = ['dry', 'wet', 'summer', 'autumn', 'winter', 'spring', 'Jan', 'Feb', 'Mar', 'Apr', + 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', 'Daylight', 'Night'] + spatial_filters = ['Spring_high', 'Spring_low', 'Neap_high', 'Neap_low', 'Hightide', 'Lowtide'] + + ## Set the required range of tide-height percentiles for exposure calculation + # calculate_quantiles = np.linspace(0, 1, 101) + calculate_quantiles = np.linspace(0, 1, 1001)#Temporary to separate exposure values + + ## Create empty datasets to store outputs into + exposure = xr.Dataset(coords=dict(y=(['y'], dem.y.values), + x=(['x'], dem.x.values))) + tide_cq_dict = xr.Dataset(coords=dict(y=(['y'], dem.y.values), + x=(['x'], dem.x.values))) + + ## Create an empty dict to store temporal `time_range` variables into + timeranges = {} -# ## For use with spatial filter options -# ## stack the y and x dimensions -# stacked_everything = ModelledTides[0].stack(z=['y','x']).groupby('z') + ## If filter combinations are desired, make sure each filter is calculated individually for later combination + if filters_combined is not None: + for x in filters_combined: + filters.append(str(x[0])) if str(x[0]) not in filters else next + filters.append(str(x[1])) if x[1] not in filters else next -# # ## For use with spatial filter options ####TEMP: commented out to test ensemble tide modelling. No mod_timesteps var -# # # # Extract the modelling freq units -# # order=(int(mod_timesteps[0]/2)) - -# ## Temp: for tide-regime testing -# filt_dt['modelledtides'] = ModelledTides + if 'unfiltered' in filters: + print('Calculating unfiltered exposure') + + if (tide_model[0] == "ensemble") or (tide_model == "ensemble"): + # Use ensemble model combining multiple input ocean tide models + tide_cq, _ = pixel_tides_ensemble( + dem, + calculate_quantiles=calculate_quantiles, + times=time_range, + directory=tide_model_dir, + ancillary_points="data/raw/tide_correlations_2017-2019.geojson", + top_n=3, + reduce_method='mean', + resolution=3000, + ) + + else: + # Use single input ocean tide model + tide_cq, _ = pixel_tides( + dem, + resample=True, + calculate_quantiles=calculate_quantiles, + times=time_range, + model=tide_model, + directory=tide_model_dir, + ) + + # Add tide_cq to output dict + tide_cq_dict['unfiltered']=tide_cq + + # Calculate the tide-height difference between the elevation value and + # each percentile value per pixel + diff = abs(tide_cq - dem) + + # Take the percentile of the smallest tide-height difference as the + # exposure % per pixel + idxmin = diff.idxmin(dim="quantile") + + # Convert to percentage + exposure['unfiltered'] = idxmin * 100 + + # return exposure + + if any (x in spatial_filters for x in filters): + if (tide_model[0] == "ensemble") or (tide_model == "ensemble"): + # Use ensemble model combining multiple input ocean tide models + ModelledTides, _ = pixel_tides_ensemble( + dem, + times=time_range, + directory=tide_model_dir, + ancillary_points="data/raw/tide_correlations_2017-2019.geojson", + top_n=3, + reduce_method='mean', + resolution=3000, + ) + + else: + # Use single input ocean tide model + ModelledTides, _ = pixel_tides( + dem, + times=time_range, + resample=True, + model=tide_model, + directory=tide_model_dir, + ) + + ## For use with spatial filter options + ## stack the y and x dimensions + stacked_everything = ModelledTides.stack(z=['y','x']).groupby('z') -# # Filter the input timerange to include only dates or tide ranges of interest -# if filters is not None: -# for x in filters: -# if x in temporal_filters: - -# if x == 'dry': -# timeranges['dry_exp'] = time_range.drop(time_range[(time_range.month == 10) ## Wet season: Oct-Mar -# |(time_range.month == 11) -# |(time_range.month == 12) -# |(time_range.month == 1) -# |(time_range.month == 2) -# |(time_range.month == 3) -# ]) -# elif x == 'wet': -# timeranges['wet_exp'] = time_range.drop(time_range[(time_range.month == 4) ## Dry season: Apr-Sep -# |(time_range.month == 5) -# |(time_range.month == 6) -# |(time_range.month == 7) -# |(time_range.month == 8) -# |(time_range.month == 9) -# ]) -# elif x == 'summer': -# timeranges['summer_exp'] = time_range.drop(time_range[time_range.quarter != 1]) -# elif x == 'autumn': -# timeranges['autumn_exp'] = time_range.drop(time_range[time_range.quarter != 2]) -# elif x == 'winter': -# timeranges['winter_exp'] = time_range.drop(time_range[time_range.quarter != 3]) -# elif x == 'spring': -# timeranges['spring_exp'] = time_range.drop(time_range[time_range.quarter != 4]) -# elif x == 'Jan': -# timeranges['Jan_exp'] = time_range.drop(time_range[time_range.month != 1]) -# elif x == 'Feb': -# timeranges['Feb_exp'] = time_range.drop(time_range[time_range.month != 2]) -# elif x == 'Mar': -# timeranges['Mar_exp'] = time_range.drop(time_range[time_range.month != 3]) -# elif x == 'Apr': -# timeranges['Apr_exp'] = time_range.drop(time_range[time_range.month != 4]) -# elif x == 'May': -# timeranges['May_exp'] = time_range.drop(time_range[time_range.month != 5]) -# elif x == 'Jun': -# timeranges['Jun_exp'] = time_range.drop(time_range[time_range.month != 6]) -# elif x == 'Jul': -# timeranges['Jul_exp'] = time_range.drop(time_range[time_range.month != 7]) -# elif x == 'Aug': -# timeranges['Aug_exp'] = time_range.drop(time_range[time_range.month != 8]) -# elif x == 'Sep': -# timeranges['Sep_exp'] = time_range.drop(time_range[time_range.month != 9]) -# elif x == 'Oct': -# timeranges['Oct_exp'] = time_range.drop(time_range[time_range.month != 10]) -# elif x == 'Nov': -# timeranges['Nov_exp'] = time_range.drop(time_range[time_range.month != 11]) -# elif x == 'Dec': -# timeranges['Dec_exp'] = time_range.drop(time_range[time_range.month != 12]) -# elif x == 'Daylight' or 'Night': # or ('Daylight' and 'Night') -# ## Pip install sunriset module for calculate local sunrise and sunset times -# # !pip install sunriset - -# timezones = {'wa':'../../gdata1/data/boundaries/GEODATA_COAST_100K/western_australia/cstwacd_r.shp', -# 'nt':'../../gdata1/data/boundaries/GEODATA_COAST_100K/northern_territory/cstntcd_r.shp', -# 'sa':'../../gdata1/data/boundaries/GEODATA_COAST_100K/south_australia/cstsacd_r.shp', -# 'qld':'../../gdata1/data/boundaries/GEODATA_COAST_100K/queensland/cstqldmd_r.shp', -# 'nsw':'../../gdata1/data/boundaries/GEODATA_COAST_100K/new_south_wales/cstnswcd_r.shp', -# 'vic':'../../gdata1/data/boundaries/GEODATA_COAST_100K/victoria/cstviccd_r.shp', -# 'tas':'../../gdata1/data/boundaries/GEODATA_COAST_100K/tasmania/csttascd_r.shp' -# } - -# ## Determine the timezone of the pixels -# ## Bring in the state polygons (note: native crs = epsg:4283) -# wa = gpd.read_file(timezones['wa']) -# nt = gpd.read_file(timezones['nt']) -# sa = gpd.read_file(timezones['sa']) -# qld = gpd.read_file(timezones['qld']) -# nsw = gpd.read_file(timezones['nsw']) -# vic = gpd.read_file(timezones['vic']) -# tas = gpd.read_file(timezones['tas']) - -# # Merge the polygons to create single state/territory boundaries -# wa = gpd.GeoSeries(unary_union(wa.geometry)) -# nt = gpd.GeoSeries(unary_union(nt.geometry)) -# sa = gpd.GeoSeries(unary_union(sa.geometry)) -# qld = gpd.GeoSeries(unary_union(qld.geometry)) -# nsw = gpd.GeoSeries(unary_union(nsw.geometry)) -# vic = gpd.GeoSeries(unary_union(vic.geometry)) -# tas = gpd.GeoSeries(unary_union(tas.geometry)) - -# ## Note: day and night times will be calculated once per area-of-interest(ds) -# ## for the median latitude and longitude position of the aoi -# tidepost_lat_3577 = dem.x.median(dim='x').values -# tidepost_lon_3577 = dem.y.median(dim='y').values - -# ## Translate the crs of the tidepost to determine (1) local timezone -# ## and (2) the local sunrise and sunset times - -# ## Set the Datacube native crs (GDA/Aus Albers (meters)) -# crs_3577 = CRS.from_epsg(3577) - -# ## (1) Create a transform to convert default epsg3577 coords to epsg4283 to compare -# ## against state/territory boundary polygons and assign a timezone - -# ## GDA94 CRS (degrees) -# crs_4283 = CRS.from_epsg(4283) -# ## Transfer coords from/to -# transformer_4283 = Transformer.from_crs(crs_3577, crs_4283) -# ## Translate tidepost coords -# tidepost_lat_4283, tidepost_lon_4283 = transformer_4283.transform(tidepost_lat_3577, -# tidepost_lon_3577) -# ## Coordinate point to test for timezone -# point_4283 = Point(tidepost_lon_4283, tidepost_lat_4283) - -# ## (2) Create a transform to convert default epsg3577 coords to epsg4326 for use in -# ## sunise/sunset library - -# ## World WGS84 (degrees) -# crs_4326 = CRS.from_epsg(4326) -# ## Transfer coords from/to -# transformer_4326 = Transformer.from_crs(crs_3577, crs_4326) -# ## Translate the tidepost coords -# tidepost_lat_4326, tidepost_lon_4326 = transformer_4326.transform(tidepost_lat_3577, -# tidepost_lon_3577) -# ## Coordinate point to locate the sunriset calculation -# point_4326 = Point(tidepost_lon_4326, tidepost_lat_4326) - -# ## Set the local timezone for the analysis area of interest -# if wa.contains(point_4283)[0] == True: -# timezone = 'Australia/West' -# local_tz = 8 - -# elif nt.contains(point_4283)[0] == True: -# timezone = 'Australia/North' -# local_tz = 9.5 - -# elif sa.contains(point_4283)[0] == True: -# timezone = 'Australia/South' -# local_tz = 9.5 - -# elif qld.contains(point_4283)[0] == True: -# timezone = 'Australia/Queensland' -# local_tz = 10 - -# elif nsw.contains(point_4283)[0] == True: -# timezone = 'Australia/NSW' -# local_tz = 10 - -# elif vic.contains(point_4283)[0] == True: -# timezone = 'Australia/Victoria' -# local_tz = 10 - -# elif tas.contains(point_4283)[0] == True: -# timezone = 'Australia/Tasmania' -# local_tz = 10 - -# ## Calculate the local sunrise and sunset times -# # Place start and end dates in correct format -# start=round_date_strings(start_date, round_type="start") -# end=round_date_strings(end_date, round_type="end") -# startdate = datetime.date(pd.to_datetime(start).year, -# pd.to_datetime(start).month, -# pd.to_datetime(start).day) - -# # Make 'all_timerange' time-zone aware -# localtides = time_range.tz_localize(tz=pytz.UTC).tz_convert(timezone) - -# # Replace the UTC datetimes from all_timerange with local times -# modelledtides = pd.DataFrame(index = localtides) - -# # Return the difference in years for the time-period. -# # Round up to ensure all modelledtide datetimes are captured in the solar model -# diff = pd.to_datetime(end) - pd.to_datetime(start) -# diff = int(ceil(diff.days/365)) - -# ## Model sunrise and sunset -# sun_df = sunriset.to_pandas(startdate, tidepost_lat_4326, tidepost_lon_4326, local_tz, diff) - -# ## Set the index as a datetimeindex to match the modelledtide df -# sun_df = sun_df.set_index(pd.DatetimeIndex(sun_df.index)) - -# ## Append the date to each Sunrise and Sunset time -# sun_df['Sunrise dt'] = sun_df.index + sun_df['Sunrise'] -# sun_df['Sunset dt'] = sun_df.index + (sun_df['Sunset']) - -# ## Create new dataframes where daytime and nightime datetimes are recorded, then merged -# ## on a new `Sunlight` column -# daytime=pd.DataFrame(data = 'Sunrise', index=sun_df['Sunrise dt'], columns=['Sunlight']) -# nighttime=pd.DataFrame(data = 'Sunset', index=sun_df['Sunset dt'], columns=['Sunlight']) -# DayNight = pd.concat([daytime, nighttime], join='outer') -# DayNight.sort_index(inplace=True) -# DayNight.index.rename('Datetime', inplace=True) - -# ## Create an xarray object from the merged day/night dataframe -# day_night = xr.Dataset.from_dataframe(DayNight) - -# ## Remove local timezone timestamp column in modelledtides dataframe. Xarray doesn't handle -# ## timezone aware datetimeindexes 'from_dataframe' very well. -# modelledtides.index = modelledtides.index.tz_localize(tz=None) - -# ## Create an xr Dataset from the modelledtides pd.dataframe -# mt = modelledtides.to_xarray() - -# ## Filter the modelledtides (mt) by the daytime, nighttime datetimes from the sunriset module -# ## Modelled tides are designated as either day or night by propogation of the last valid index -# ## value forward -# Solar=day_night.sel(Datetime=mt.index, method='ffill') - -# ## Assign the day and night tideheight datasets -# SolarDayTides = mt.where(Solar.Sunlight=='Sunrise', drop=True) -# SolarNightTides = mt.where(Solar.Sunlight=='Sunset', drop=True) - -# ## Extract DatetimeIndexes to use in exposure calculations -# all_timerange_day = pd.DatetimeIndex(SolarDayTides.index) -# all_timerange_night = pd.DatetimeIndex(SolarNightTides.index) - -# if x == 'Daylight': -# timeranges['Day_exp'] = all_timerange_day -# if x == 'Night': -# timeranges['Night_exp'] = all_timerange_night + # Filter the input timerange to include only dates or tide ranges of interest + # if filters is not None: + for x in filters: + if x in temporal_filters: + print(f'Calculating temporal filter: {x}') + + if x == 'dry': + timeranges['dry'] = time_range.drop(time_range[(time_range.month == 10) ## Wet season: Oct-Mar + |(time_range.month == 11) + |(time_range.month == 12) + |(time_range.month == 1) + |(time_range.month == 2) + |(time_range.month == 3) + ]) + elif x == 'wet': + timeranges['wet'] = time_range.drop(time_range[(time_range.month == 4) ## Dry season: Apr-Sep + |(time_range.month == 5) + |(time_range.month == 6) + |(time_range.month == 7) + |(time_range.month == 8) + |(time_range.month == 9) + ]) + elif x == 'summer': + timeranges['summer'] = time_range.drop(time_range[time_range.quarter != 1]) + elif x == 'autumn': + timeranges['autumn'] = time_range.drop(time_range[time_range.quarter != 2]) + elif x == 'winter': + timeranges['winter'] = time_range.drop(time_range[time_range.quarter != 3]) + elif x == 'spring': + timeranges['spring'] = time_range.drop(time_range[time_range.quarter != 4]) + elif x == 'Jan': + timeranges['Jan'] = time_range.drop(time_range[time_range.month != 1]) + elif x == 'Feb': + timeranges['Feb'] = time_range.drop(time_range[time_range.month != 2]) + elif x == 'Mar': + timeranges['Mar'] = time_range.drop(time_range[time_range.month != 3]) + elif x == 'Apr': + timeranges['Apr'] = time_range.drop(time_range[time_range.month != 4]) + elif x == 'May': + timeranges['May'] = time_range.drop(time_range[time_range.month != 5]) + elif x == 'Jun': + timeranges['Jun'] = time_range.drop(time_range[time_range.month != 6]) + elif x == 'Jul': + timeranges['Jul'] = time_range.drop(time_range[time_range.month != 7]) + elif x == 'Aug': + timeranges['Aug'] = time_range.drop(time_range[time_range.month != 8]) + elif x == 'Sep': + timeranges['Sep'] = time_range.drop(time_range[time_range.month != 9]) + elif x == 'Oct': + timeranges['Oct'] = time_range.drop(time_range[time_range.month != 10]) + elif x == 'Nov': + timeranges['Nov'] = time_range.drop(time_range[time_range.month != 11]) + elif x == 'Dec': + timeranges['Dec'] = time_range.drop(time_range[time_range.month != 12]) + elif x == 'Daylight' or 'Night': + + timezones = {'wa':'../../gdata1/data/boundaries/GEODATA_COAST_100K/western_australia/cstwacd_r.shp', + 'nt':'../../gdata1/data/boundaries/GEODATA_COAST_100K/northern_territory/cstntcd_r.shp', + 'sa':'../../gdata1/data/boundaries/GEODATA_COAST_100K/south_australia/cstsacd_r.shp', + 'qld':'../../gdata1/data/boundaries/GEODATA_COAST_100K/queensland/cstqldmd_r.shp', + 'nsw':'../../gdata1/data/boundaries/GEODATA_COAST_100K/new_south_wales/cstnswcd_r.shp', + 'vic':'../../gdata1/data/boundaries/GEODATA_COAST_100K/victoria/cstviccd_r.shp', + 'tas':'../../gdata1/data/boundaries/GEODATA_COAST_100K/tasmania/csttascd_r.shp' + } + + ## Determine the timezone of the pixels + ## Bring in the state polygons (note: native crs = epsg:4283) + wa = gpd.read_file(timezones['wa']) + nt = gpd.read_file(timezones['nt']) + sa = gpd.read_file(timezones['sa']) + qld = gpd.read_file(timezones['qld']) + nsw = gpd.read_file(timezones['nsw']) + vic = gpd.read_file(timezones['vic']) + tas = gpd.read_file(timezones['tas']) + + # Merge the polygons to create single state/territory boundaries + wa = gpd.GeoSeries(unary_union(wa.geometry)) + nt = gpd.GeoSeries(unary_union(nt.geometry)) + sa = gpd.GeoSeries(unary_union(sa.geometry)) + qld = gpd.GeoSeries(unary_union(qld.geometry)) + nsw = gpd.GeoSeries(unary_union(nsw.geometry)) + vic = gpd.GeoSeries(unary_union(vic.geometry)) + tas = gpd.GeoSeries(unary_union(tas.geometry)) + + ## Note: day and night times will be calculated once per area-of-interest(ds) + ## for the median latitude and longitude position of the aoi + tidepost_lat_3577 = dem.x.median(dim='x').values + tidepost_lon_3577 = dem.y.median(dim='y').values + + ## Set the Datacube native crs (GDA/Aus Albers (meters)) + crs_3577 = CRS.from_epsg(3577) + + ## Translate the crs of the tidepost to determine (1) local timezone + ## and (2) the local sunrise and sunset times: + + ## (1) Create a transform to convert default epsg3577 coords to epsg4283 to compare + ## against state/territory boundary polygons and assign a timezone + + ## GDA94 CRS (degrees) + crs_4283 = CRS.from_epsg(4283) + ## Transfer coords from/to + transformer_4283 = Transformer.from_crs(crs_3577, crs_4283) + ## Translate tidepost coords + tidepost_lat_4283, tidepost_lon_4283 = transformer_4283.transform(tidepost_lat_3577, + tidepost_lon_3577) + ## Coordinate point to test for timezone + point_4283 = Point(tidepost_lon_4283, tidepost_lat_4283) + + ## (2) Create a transform to convert default epsg3577 coords to epsg4326 for use in + ## sunise/sunset library + + ## World WGS84 (degrees) + crs_4326 = CRS.from_epsg(4326) + ## Transfer coords from/to + transformer_4326 = Transformer.from_crs(crs_3577, crs_4326) + ## Translate the tidepost coords + tidepost_lat_4326, tidepost_lon_4326 = transformer_4326.transform(tidepost_lat_3577, + tidepost_lon_3577) + ## Coordinate point to locate the sunriset calculation + point_4326 = Point(tidepost_lon_4326, tidepost_lat_4326) + + ## Set the local timezone for the analysis area of interest + if wa.contains(point_4283)[0] == True: + timezone = 'Australia/West' + local_tz = 8 + + elif nt.contains(point_4283)[0] == True: + timezone = 'Australia/North' + local_tz = 9.5 + + elif sa.contains(point_4283)[0] == True: + timezone = 'Australia/South' + local_tz = 9.5 + + elif qld.contains(point_4283)[0] == True: + timezone = 'Australia/Queensland' + local_tz = 10 + + elif nsw.contains(point_4283)[0] == True: + timezone = 'Australia/NSW' + local_tz = 10 + + elif vic.contains(point_4283)[0] == True: + timezone = 'Australia/Victoria' + local_tz = 10 + + elif tas.contains(point_4283)[0] == True: + timezone = 'Australia/Tasmania' + local_tz = 10 + + ## Calculate the local sunrise and sunset times + # Place start and end dates in correct format + start = time_range[0] + end = time_range[-1] + startdate = datetime.date(pd.to_datetime(start).year, + pd.to_datetime(start).month, + pd.to_datetime(start).day) + + # Make 'all_timerange' time-zone aware + localtides = time_range.tz_localize(tz=pytz.UTC).tz_convert(timezone) + + # Replace the UTC datetimes from all_timerange with local times + modelledtides = pd.DataFrame(index = localtides) + + # Return the difference in years for the time-period. + # Round up to ensure all modelledtide datetimes are captured in the solar model + diff = pd.to_datetime(end) - pd.to_datetime(start) + diff = int(ceil(diff.days/365)) + + ## Model sunrise and sunset + sun_df = sunriset.to_pandas(startdate, tidepost_lat_4326, tidepost_lon_4326, local_tz, diff) + + ## Set the index as a datetimeindex to match the modelledtide df + sun_df = sun_df.set_index(pd.DatetimeIndex(sun_df.index)) + + ## Append the date to each Sunrise and Sunset time + sun_df['Sunrise dt'] = sun_df.index + sun_df['Sunrise'] + sun_df['Sunset dt'] = sun_df.index + (sun_df['Sunset']) + + ## Create new dataframes where daytime and nightime datetimes are recorded, then merged + ## on a new `Sunlight` column + daytime=pd.DataFrame(data = 'Sunrise', index=sun_df['Sunrise dt'], columns=['Sunlight']) + nighttime=pd.DataFrame(data = 'Sunset', index=sun_df['Sunset dt'], columns=['Sunlight']) + DayNight = pd.concat([daytime, nighttime], join='outer') + DayNight.sort_index(inplace=True) + DayNight.index.rename('Datetime', inplace=True) + + ## Create an xarray object from the merged day/night dataframe + day_night = xr.Dataset.from_dataframe(DayNight) + + ## Remove local timezone timestamp column in modelledtides dataframe. Xarray doesn't handle + ## timezone aware datetimeindexes 'from_dataframe' very well. + modelledtides.index = modelledtides.index.tz_localize(tz=None) + + ## Create an xr Dataset from the modelledtides pd.dataframe + mt = modelledtides.to_xarray() + + ## Filter the modelledtides (mt) by the daytime, nighttime datetimes from the sunriset module + ## Modelled tides are designated as either day or night by propogation of the last valid index + ## value forward + Solar=day_night.sel(Datetime=mt.index, method='ffill') + + ## Assign the day and night tideheight datasets + SolarDayTides = mt.where(Solar.Sunlight=='Sunrise', drop=True) + SolarNightTides = mt.where(Solar.Sunlight=='Sunset', drop=True) + + ## Extract DatetimeIndexes to use in exposure calculations + all_timerange_day = pd.DatetimeIndex(SolarDayTides.index) + all_timerange_night = pd.DatetimeIndex(SolarNightTides.index) + + if x == 'Daylight': + timeranges['Daylight'] = all_timerange_day + if x == 'Night': + timeranges['Night'] = all_timerange_night + + elif x in spatial_filters: + print(f'Calculating statial filter: {x}') + + # # Extract the modelling freq units + # Split the number and text characters in modelled_freq + freq_time = int(re.findall(r'(\d+)(\w+)', modelled_freq)[0][0]) + freq_unit = str(re.findall(r'(\d+)(\w+)', modelled_freq)[0][-1]) + + # Extract the number of modelled timesteps per 14 days (half lunar cycle) for neap/spring calcs + mod_timesteps = pd.Timedelta(14,"d")/pd.Timedelta(freq_time, freq_unit) -# elif x in spatial_filters: + ## Identify kwargs for peak detection algorithm + order=(int(mod_timesteps/2)) + + ## Calculate the spring highest and spring lowest tides per 14 day half lunar cycle + if x == 'Spring_high': + + print ('Calculating Spring_high') + + ## apply the peak detection routine + stacked_everything_high = stacked_everything.apply( + lambda x: xr.DataArray(argrelmax(x.values, order=order)[0]) + ) + ## Unstack + springhighs_all = stacked_everything_high.unstack('z') + ##Reorder the y axis. Uncertain why it gets reversed during the stack/unstack. + springhighs_all = springhighs_all.reindex(y=springhighs_all.y[::-1]) + ## Rename the time axis + springhighs_all = springhighs_all.rename({'dim_0':'time'}) + ## Convert to dataset + springhighs_all = springhighs_all.to_dataset(name = 'time') + ## Reorder the dims + springhighs_all = springhighs_all[['time','y','x']] + + # Select dates associated with detected peaks + ## removed reference below to ModelledTides[0]. Possibly an artefact of new + ## pixel_tides_ensemble func. If using pixel_tides, may need to revert to ModelledTides[0]. + + # springhighs_all = ModelledTides[0].to_dataset().isel(time=springhighs_all.time) + springhighs_all = ModelledTides.to_dataset().isel(time=springhighs_all.time) + + ## Save datetimes for calculation of combined filter exposure + timeranges['Spring_high'] = pd.to_datetime(springhighs_all.isel(x=1,y=1).time) + + ## Extract the peak height dates + tide_cq = springhighs_all.tide_m.quantile(q=calculate_quantiles,dim='time') + + # Add tide_cq to output dict + tide_cq_dict[str(x)]=tide_cq + + # Calculate the tide-height difference between the elevation value and + # each percentile value per pixel + diff = abs(tide_cq - dem) + + # Take the percentile of the smallest tide-height difference as the + # exposure % per pixel + idxmin = diff.idxmin(dim="quantile") + + # Convert to percentage + exposure['Spring_high'] = idxmin * 100 + + + ## Calculate the spring highest and spring lowest tides per 14 day half lunar cycle + if x == 'Spring_low': + print ('Calculating Spring_low') + + ## apply the peak detection routine + stacked_everything_low = stacked_everything.apply(lambda x: xr.DataArray(argrelmin(x.values, order=order)[0])) + ## Unstack + springlows_all = stacked_everything_low.unstack('z') + ##Reorder the y axis. Uncertain why it gets reversed during the stack/unstack. + springlows_all = springlows_all.reindex(y=springlows_all.y[::-1]) + ## Rename the time axis + springlows_all = springlows_all.rename({'dim_0':'time'}) + ## Convert to dataset + springlows_all = springlows_all.to_dataset(name = 'time') + ## Reorder the dims + springlows_all = springlows_all[['time','y','x']] + ## Select dates associated with detected peaks + # springlows_all = ModelledTides[0].to_dataset().isel(time=springlows_all.time) + springlows_all = ModelledTides.to_dataset().isel(time=springlows_all.time)## removed reference to ModelledTides[0]. Possibly an artefact of new pixel_tides_ensemble func. If using pixel_tides, may need to revert to ModelledTides[0]. + + ## Save datetimes for calculation of combined filter exposure + timeranges['Spring_low'] = pd.to_datetime(springlows_all.isel(x=1,y=1).time) + + tide_cq = springlows_all.tide_m.quantile(q=calculate_quantiles,dim='time') + + # Add tide_cq to output dict + tide_cq_dict[str(x)]=tide_cq + + # Calculate the tide-height difference between the elevation value and + # each percentile value per pixel + diff = abs(tide_cq - dem) + + # Take the percentile of the smallest tide-height difference as the + # exposure % per pixel + idxmin = diff.idxmin(dim="quantile") + + # Convert to percentage + exposure['Spring_low'] = idxmin * 100 + + if x == 'Neap_high': + print ('Calculating Neap_high') + ## Calculate the number of spring high tides to support calculation of neap highs + ## apply the peak detection routine + stacked_everything_high = stacked_everything.apply(lambda x: xr.DataArray(argrelmax(x.values, order=order)[0])) + ## Unstack + springhighs_all = stacked_everything_high.unstack('z') + + ## apply the peak detection routine to calculate all the high tide maxima + Max_testarray = stacked_everything.apply(lambda x: xr.DataArray(argrelmax(x.values)[0])) + ## extract the corresponding dates from the peaks + Max_testarray = (Max_testarray.unstack('z')) + Max_testarray = (Max_testarray.reindex(y=Max_testarray.y[::-1]) + .rename({'dim_0':'time'}) + .to_dataset(name = 'time') + [['time','y','x']] + ) + ## extract all hightide peaks + # Max_testarray = ModelledTides[0].to_dataset().isel(time=Max_testarray.time) + Max_testarray = ModelledTides.to_dataset().isel(time=Max_testarray.time)## removed reference to ModelledTides[0]. Possibly an artefact of new pixel_tides_ensemble func. If using pixel_tides, may need to revert to ModelledTides[0]. + + ## repeat the peak detection to identify neap high tides (minima in the high tide maxima) + stacked_everything2 = Max_testarray.tide_m.stack(z=['y','x']).groupby('z') + ## extract neap high tides based on 14 day half lunar cycle - determined as the fraction of all high tide points + ## relative to the number of spring high tide values + order_nh = int(ceil((len(Max_testarray.time)/(len(springhighs_all))/2))) + ## apply the peak detection routine to calculate all the neap high tide minima within the high tide peaks + neaphighs_all = stacked_everything2.apply(lambda x: xr.DataArray(argrelmin(x.values, order=order_nh)[0])) + ## unstack and format as above + neaphighs_all = neaphighs_all.unstack('z') + neaphighs_all = ( + neaphighs_all + .reindex(y=neaphighs_all.y[::-1]) + .rename({'dim_0':'time'}) + .to_dataset(name = 'time') + [['time','y','x']] + ) + ## extract neap high tides + neaphighs_all = Max_testarray.isel(time=neaphighs_all.time) + + ## Save datetimes for calculation of combined filter exposure + timeranges['Neap_high'] = pd.to_datetime(neaphighs_all.isel(x=1,y=1).time) -# # #Run a full tidal model for each pixel -# # ModelledTides = pixel_tides( -# # dem,#ds, -# # times=time_range, -# # model=tide_model, -# # directory = tide_model_dir) -# # ## stack the y and x dimensions -# # stacked_everything = ModelledTides[0].stack(z=['y','x']).groupby('z') -# # # # Extract the modelling freq units -# # # freq_unit = modelled_freq.split()[0][-1] -# # # freq_value = modelled_freq.split()[0][:-1] -# # # # Extract the number of modelled timesteps per 14 days (half lunar cycle) -# # # mod_timesteps = np.timedelta64(14,'D') / np.timedelta64(freq_value,freq_unit) -# # ## Identify kwargs for peak detection algorithm + tide_cq = neaphighs_all.tide_m.quantile(q=calculate_quantiles,dim='time') + + # Add tide_cq to output dict + tide_cq_dict[str(x)]=tide_cq + + # Calculate the tide-height difference between the elevation value and + # each percentile value per pixel + diff = abs(tide_cq - dem) + + # Take the percentile of the smallest tide-height difference as the + # exposure % per pixel + idxmin = diff.idxmin(dim="quantile") + + # Convert to percentage + exposure['Neap_high'] = idxmin * 100 + + if x == 'Neap_low': + print ('Calculating Neap_low') + ## Calculate the number of spring low tides to support calculation of neap low tides + ## apply the peak detection routine + stacked_everything_low = stacked_everything.apply(lambda x: xr.DataArray(argrelmin(x.values, order=order)[0])) + + ## Unstack + springlows_all = stacked_everything_low.unstack('z') + + ## apply the peak detection routine to calculate all the low tide maxima + Min_testarray = stacked_everything.apply(lambda x: xr.DataArray(argrelmin(x.values)[0])) + + ## extract the corresponding dates from the peaks + Min_testarray = (Min_testarray.unstack('z')) + Min_testarray = (Min_testarray.reindex(y=Min_testarray.y[::-1]) + .rename({'dim_0':'time'}) + .to_dataset(name = 'time') + [['time','y','x']] + ) + + ## extract all lowtide peaks + # Min_testarray = ModelledTides[0].to_dataset().isel(time=Min_testarray.time) + Max_testarray = ModelledTides.to_dataset().isel(time=Max_testarray.time)## removed reference to ModelledTides[0]. Possibly an artefact of new pixel_tides_ensemble func. If using pixel_tides, may need to revert to ModelledTides[0]. + + ## repeat the peak detection to identify neap low tides (maxima in the low tide maxima) + stacked_everything2 = Min_testarray.tide_m.stack(z=['y','x']).groupby('z') + + ## extract neap high tides based on 14 day half lunar cycle - determined as the fraction of all high tide points + ## relative to the number of spring high tide values + order_nl = int(ceil((len(Min_testarray.time)/(len(springlows_all))/2))) + + ## apply the peak detection routine to calculate all the neap high tide minima within the high tide peaks + neaplows_all = stacked_everything2.apply(lambda x: xr.DataArray(argrelmax(x.values, order=order_nl)[0])) + + ## unstack and format as above + neaplows_all = neaplows_all.unstack('z') + neaplows_all = ( + neaplows_all + .reindex(y=neaplows_all.y[::-1]) + .rename({'dim_0':'time'}) + .to_dataset(name = 'time') + [['time','y','x']] + ) + + ## extract neap high tides + neaplows_all = Min_testarray.isel(time=neaplows_all.time) + + ## Save datetimes for calculation of combined filter exposure + timeranges['Neap_low'] = pd.to_datetime(neaplows_all.isel(x=1,y=1).time) -# # # for x in mod_timesteps: -# # # order=(int(x/2)) -# # order=(int(mod_timesteps[0]/2)) + tide_cq = neaplows_all.tide_m.quantile(q=calculate_quantiles,dim='time') + + # Add tide_cq to output dict + tide_cq_dict[str(x)]=tide_cq + + # Calculate the tide-height difference between the elevation value and + # each percentile value per pixel + diff = abs(tide_cq - dem) + + # Take the percentile of the smallest tide-height difference as the + # exposure % per pixel + idxmin = diff.idxmin(dim="quantile") + + # Convert to percentage + exposure['Neap_low'] = idxmin * 100 + + + if x == 'Hightide': + print ('Calculating Hightide') + def lowesthightides(x): + ''' + x is a grouping of x and y pixels from the peaks_array (labelled as 'z') + ''' + + ## apply the peak detection routine to calculate all the high tide maxima + high_peaks = np.array(argrelmax(x.values)[0]) + + ## extract all hightide peaks + Max_testarray = x.isel(time=high_peaks) + + ## Identify all lower hightide peaks + lowhigh_peaks = np.array(argrelmin(Max_testarray.values)[0]) + + ## Interpolate the lower hightide curve + neap_high_linear = interp( + ## Create an array to interpolate into + np.arange(0,len(x.time)), + ## low high peaks as a subset of all high tide peaks + high_peaks[lowhigh_peaks], + ## Corresponding tide heights + Max_testarray.isel(time=lowhigh_peaks).squeeze(['z']).values, + ) + + # # Extract hightides as all tides higher than/equal to the extrapolated lowest high tide line + hightide = x.squeeze(['z']).where(x.squeeze(['z']) >= neap_high_linear, drop=True) + + return hightide + + ## Vectorise the hightide calculation + lowhighs_all = stacked_everything.apply(lambda x: xr.DataArray(lowesthightides(x))) + + # ## Unstack and re-format the array + lowhighs_all = lowhighs_all.unstack('z') + lowhighs_all_unstacked = ( + lowhighs_all + .reindex(y=lowhighs_all.y[::-1]) + .to_dataset() + [['tide_m','time','y','x']] + ) + + ## Save datetimes for calculation of combined filter exposure + timeranges['Hightide'] = pd.to_datetime(lowhighs_all_unstacked.isel(x=1,y=1).time) -# # ## Temp: for tide-regime testing -# # filt_dt['modelledtides'] = ModelledTides + tide_cq = lowhighs_all_unstacked.tide_m.quantile(q=calculate_quantiles,dim='time') + + # Add tide_cq to output dict + tide_cq_dict[str(x)]=tide_cq -# ## Calculate the spring highest and spring lowest tides per 14 day half lunar cycle -# if x == 'Spring_high': - -# print ('Calculating Spring_high') - -# ## apply the peak detection routine -# stacked_everything_high = stacked_everything.apply(lambda x: xr.DataArray(argrelmax(x.values, order=order)[0])) -# ## Unstack -# springhighs_all = stacked_everything_high.unstack('z') -# ##Reorder the y axis. Uncertain why it gets reversed during the stack/unstack. -# springhighs_all = springhighs_all.reindex(y=springhighs_all.y[::-1]) -# ## Rename the time axis -# springhighs_all = springhighs_all.rename({'dim_0':'time'}) -# ## Convert to dataset -# springhighs_all = springhighs_all.to_dataset(name = 'time') -# ## Reorder the dims -# springhighs_all = springhighs_all[['time','y','x']] -# ## Select dates associated with detected peaks -# springhighs_all = ModelledTides[0].to_dataset().isel(time=springhighs_all.time) -# ## Extract the peak height dates -# # time_range = test_mt[springhighs].time.values - -# ## Temp: for tide-regime testing -# filt_dt['springhighs_all']=springhighs_all.tide_m - -# tide_cq = springhighs_all.tide_m.quantile(q=calculate_quantiles,dim='time') -# tide_cq_dict[str(x)]=tide_cq - -# # Calculate the tide-height difference between the elevation value and -# # each percentile value per pixel -# diff = abs(tide_cq - dem) - -# # Take the percentile of the smallest tide-height difference as the -# # exposure % per pixel -# idxmin = diff.idxmin(dim="quantile") - -# # Convert to percentage -# exposure['springhigh_exp'] = idxmin * 100 - - -# ## Calculate the spring highest and spring lowest tides per 14 day half lunar cycle -# if x == 'Spring_low': -# print ('Calculating Spring_low') - -# ## apply the peak detection routine -# stacked_everything_low = stacked_everything.apply(lambda x: xr.DataArray(argrelmin(x.values, order=order)[0])) -# ## Unstack -# springlows_all = stacked_everything_low.unstack('z') -# ##Reorder the y axis. Uncertain why it gets reversed during the stack/unstack. -# springlows_all = springlows_all.reindex(y=springlows_all.y[::-1]) -# ## Rename the time axis -# springlows_all = springlows_all.rename({'dim_0':'time'}) -# ## Convert to dataset -# springlows_all = springlows_all.to_dataset(name = 'time') -# ## Reorder the dims -# springlows_all = springlows_all[['time','y','x']] -# ## Select dates associated with detected peaks -# springlows_all = ModelledTides[0].to_dataset().isel(time=springlows_all.time) -# ## Extract the peak height dates -# # time_range = test_mt[springlows_all].time.values - -# ## Temp: for tide-regime testing -# filt_dt['springlows_all'] = springlows_all.tide_m - -# tide_cq = springlows_all.tide_m.quantile(q=calculate_quantiles,dim='time') -# tide_cq_dict[str(x)]=tide_cq - -# # Calculate the tide-height difference between the elevation value and -# # each percentile value per pixel -# diff = abs(tide_cq - dem) - -# # Take the percentile of the smallest tide-height difference as the -# # exposure % per pixel -# idxmin = diff.idxmin(dim="quantile") - -# # Convert to percentage -# exposure['springlow_exp'] = idxmin * 100 - -# if x == 'Neap_high': -# print ('Calculating Neap_high') -# ## Calculate the number of spring high tides to support calculation of neap highs -# ## apply the peak detection routine -# stacked_everything_high = stacked_everything.apply(lambda x: xr.DataArray(argrelmax(x.values, order=order)[0])) -# ## Unstack -# springhighs_all = stacked_everything_high.unstack('z') - -# ## apply the peak detection routine to calculate all the high tide maxima -# Max_testarray = stacked_everything.apply(lambda x: xr.DataArray(argrelmax(x.values)[0])) -# ## extract the corresponding dates from the peaks -# Max_testarray = (Max_testarray.unstack('z')) -# Max_testarray = (Max_testarray.reindex(y=Max_testarray.y[::-1]) -# .rename({'dim_0':'time'}) -# .to_dataset(name = 'time') -# [['time','y','x']] -# ) -# ## extract all hightide peaks -# Max_testarray = ModelledTides[0].to_dataset().isel(time=Max_testarray.time) - -# ## repeat the peak detection to identify neap high tides (minima in the high tide maxima) -# stacked_everything2 = Max_testarray.tide_m.stack(z=['y','x']).groupby('z') -# ## extract neap high tides based on 14 day half lunar cycle - determined as the fraction of all high tide points -# ## relative to the number of spring high tide values -# order_nh = int(ceil((len(Max_testarray.time)/(len(springhighs_all))/2))) -# ## apply the peak detection routine to calculate all the neap high tide minima within the high tide peaks -# neaphighs_all = stacked_everything2.apply(lambda x: xr.DataArray(argrelmin(x.values, order=order_nh)[0])) -# ## unstack and format as above -# neaphighs_all = neaphighs_all.unstack('z') -# neaphighs_all = ( -# neaphighs_all -# .reindex(y=neaphighs_all.y[::-1]) -# .rename({'dim_0':'time'}) -# .to_dataset(name = 'time') -# [['time','y','x']] -# ) -# ## extract neap high tides -# neaphighs_all = Max_testarray.isel(time=neaphighs_all.time) - -# ## Temp: for tide-regime testing -# filt_dt['neaphighs_all'] = neaphighs_all.tide_m + # Calculate the tide-height difference between the elevation value and + # each percentile value per pixel + diff = abs(tide_cq - dem) + + # Take the percentile of the smallest tide-height difference as the + # exposure % per pixel + idxmin = diff.idxmin(dim="quantile") + + # Convert to percentage + exposure['Hightide'] = idxmin * 100 + + if x == 'Lowtide': + print ('Calculating Lowtide') + def highestlowtides(x): + ''' + x is a grouping of x and y pixels from the peaks_array (labelled as 'z') + ''' + + ## apply the peak detection routine to calculate all the high tide maxima + low_peaks = np.array(argrelmin(x.values)[0]) + + ## extract all hightide peaks + Min_testarray = x.isel(time=low_peaks) + + ## Identify all lower hightide peaks + highlow_peaks = np.array(argrelmax(Min_testarray.values)[0]) + + ## Interpolate the lower hightide curve + neap_low_linear = interp( + ## Create an array to interpolate into + np.arange(0,len(x.time)), + ## low high peaks as a subset of all high tide peaks + low_peaks[highlow_peaks], + ## Corresponding tide heights + Min_testarray.isel(time=highlow_peaks).squeeze(['z']).values, + ) + + # # Extract hightides as all tides higher than/equal to the extrapolated lowest high tide line + lowtide = x.squeeze(['z']).where(x.squeeze(['z']) <= neap_low_linear, drop=True) + + return lowtide + + ## Vectorise the lowtide calculation + highlows_all = stacked_everything.apply(lambda x: xr.DataArray(highestlowtides(x))) + + # ## Unstack and re-format the array + highlows_all = highlows_all.unstack('z') + highlows_all_unstacked = ( + highlows_all + .reindex(y=highlows_all.y[::-1]) + .to_dataset() + [['tide_m','time','y','x']] + ) + + ## Save datetimes for calculation of combined filter exposure + timeranges['Lowtide'] = pd.to_datetime(highlows_all.isel(x=1,y=1).time) -# tide_cq = neaphighs_all.tide_m.quantile(q=calculate_quantiles,dim='time') -# tide_cq_dict[str(x)]=tide_cq - -# # Calculate the tide-height difference between the elevation value and -# # each percentile value per pixel -# diff = abs(tide_cq - dem) - -# # Take the percentile of the smallest tide-height difference as the -# # exposure % per pixel -# idxmin = diff.idxmin(dim="quantile") - -# # Convert to percentage -# exposure['neaphigh_exp'] = idxmin * 100 - -# if x == 'Neap_low': -# print ('Calculating Neap_low') -# ## Calculate the number of spring low tides to support calculation of neap low tides -# ## apply the peak detection routine -# stacked_everything_low = stacked_everything.apply(lambda x: xr.DataArray(argrelmin(x.values, order=order)[0])) -# ## Unstack -# springlows_all = stacked_everything_low.unstack('z') - -# ## apply the peak detection routine to calculate all the low tide maxima -# Min_testarray = stacked_everything.apply(lambda x: xr.DataArray(argrelmin(x.values)[0])) -# ## extract the corresponding dates from the peaks -# Min_testarray = (Min_testarray.unstack('z')) -# Min_testarray = (Min_testarray.reindex(y=Min_testarray.y[::-1]) -# .rename({'dim_0':'time'}) -# .to_dataset(name = 'time') -# [['time','y','x']] -# ) -# ## extract all lowtide peaks -# Min_testarray = ModelledTides[0].to_dataset().isel(time=Min_testarray.time) - -# ## repeat the peak detection to identify neap low tides (maxima in the low tide maxima) -# stacked_everything2 = Min_testarray.tide_m.stack(z=['y','x']).groupby('z') -# ## extract neap high tides based on 14 day half lunar cycle - determined as the fraction of all high tide points -# ## relative to the number of spring high tide values -# order_nl = int(ceil((len(Min_testarray.time)/(len(springlows_all))/2))) -# ## apply the peak detection routine to calculate all the neap high tide minima within the high tide peaks -# neaplows_all = stacked_everything2.apply(lambda x: xr.DataArray(argrelmax(x.values, order=order_nl)[0])) -# ## unstack and format as above -# neaplows_all = neaplows_all.unstack('z') -# neaplows_all = ( -# neaplows_all -# .reindex(y=neaplows_all.y[::-1]) -# .rename({'dim_0':'time'}) -# .to_dataset(name = 'time') -# [['time','y','x']] -# ) -# ## extract neap high tides -# neaplows_all = Min_testarray.isel(time=neaplows_all.time) - -# ## Temp: for tide-regime testing -# filt_dt['neaplows_all']=neaplows_all.tide_m - -# tide_cq = neaplows_all.tide_m.quantile(q=calculate_quantiles,dim='time') -# tide_cq_dict[str(x)]=tide_cq - -# # Calculate the tide-height difference between the elevation value and -# # each percentile value per pixel -# diff = abs(tide_cq - dem) - -# # Take the percentile of the smallest tide-height difference as the -# # exposure % per pixel -# idxmin = diff.idxmin(dim="quantile") - -# # Convert to percentage -# exposure['neaplow_exp'] = idxmin * 100 - - -# if x == 'Hightide': -# print ('Calculating Hightide') -# def lowesthightides(x): -# ''' -# x is a grouping of x and y pixels from the peaks_array (labelled as 'z') -# ''' - -# ## apply the peak detection routine to calculate all the high tide maxima -# high_peaks = np.array(argrelmax(x.values)[0]) - -# ## extract all hightide peaks -# Max_testarray = x.isel(time=high_peaks) - -# ## Identify all lower hightide peaks -# lowhigh_peaks = np.array(argrelmin(Max_testarray.values)[0]) - -# ## Interpolate the lower hightide curve -# neap_high_linear = interp1d( -# ## low high peaks as a subset of all high tide peaks -# high_peaks[lowhigh_peaks], -# ## Corresponding tide heights -# Max_testarray.isel(time=lowhigh_peaks).squeeze(['z']).values, -# kind='linear', -# fill_value='extrapolate' -# ) -# ## Create an array to interpolate into sans datetimes -# count = np.arange(0,len(x),1) -# neap_high_testline = neap_high_linear(count) - -# # # Extract hightides as all tides higher than/equal to the extrapolated lowest high tide line -# hightide = x.squeeze(['z']).where(x.squeeze(['z']) >= neap_high_testline, drop=True) - -# return hightide - -# ## Vectorise the hightide calculation -# lowhighs_all = stacked_everything.apply(lambda x: xr.DataArray(lowesthightides(x))) - -# # ## Unstack and re-format the array -# lowhighs_all = lowhighs_all.unstack('z') -# lowhighs_all_unstacked = ( -# lowhighs_all -# .reindex(y=lowhighs_all.y[::-1]) -# .to_dataset() -# [['tide_m','time','y','x']] -# ) - -# ## Temp: for tide-regime testing -# filt_dt['hightides'] = lowhighs_all_unstacked.tide_m - -# tide_cq = lowhighs_all_unstacked.tide_m.quantile(q=calculate_quantiles,dim='time') - -# tide_cq_dict[str(x)]=tide_cq - -# # Calculate the tide-height difference between the elevation value and -# # each percentile value per pixel -# diff = abs(tide_cq - dem) - -# # Take the percentile of the smallest tide-height difference as the -# # exposure % per pixel -# idxmin = diff.idxmin(dim="quantile") - -# # Convert to percentage -# exposure['hightide_exp'] = idxmin * 100 - -# # return hightide_exposure - -# if x == 'Lowtide': -# print ('Calculating Lowtide') -# def highestlowtides(x): -# ''' -# x is a grouping of x and y pixels from the peaks_array (labelled as 'z') -# ''' - -# ## apply the peak detection routine to calculate all the high tide maxima -# low_peaks = np.array(argrelmin(x.values)[0]) - -# ## extract all hightide peaks -# Min_testarray = x.isel(time=low_peaks) - -# ## Identify all lower hightide peaks -# highlow_peaks = np.array(argrelmax(Min_testarray.values)[0]) - -# ## Interpolate the lower hightide curve -# neap_low_linear = interp1d( -# ## low high peaks as a subset of all high tide peaks -# low_peaks[highlow_peaks], -# ## Corresponding tide heights -# Min_testarray.isel(time=highlow_peaks).squeeze(['z']).values, -# # stacked_everything33, -# # stacked_everything333.isel(y=0,x=0), # z=0 in stacked arrays? -# # stacked_everything333,#.isel(z=x), # z=0 in stacked arrays? -# # stacked_everything333.squeeze(['z']).values, -# bounds_error=False, -# kind='linear', -# fill_value='extrapolate' -# ) -# ## Create an array to interpolate into sans datetimes -# count = np.arange(0,len(x),1) -# neap_low_testline = neap_low_linear(count) - -# # # Extract hightides as all tides higher than/equal to the extrapolated lowest high tide line -# lowtide = x.squeeze(['z']).where(x.squeeze(['z']) <= neap_low_testline, drop=True) - -# return lowtide - -# ## Vectorise the hightide calculation -# highlows_all = stacked_everything.apply(lambda x: xr.DataArray(highestlowtides(x))) - -# # ## Unstack and re-format the array -# highlows_all = highlows_all.unstack('z') -# highlows_all_unstacked = ( -# highlows_all -# .reindex(y=highlows_all.y[::-1]) -# .to_dataset() -# [['tide_m','time','y','x']] -# ) - -# ## Temp: for tide-regime testing -# filt_dt['lowtides'] = highlows_all_unstacked.tide_m - -# tide_cq = highlows_all_unstacked.tide_m.quantile(q=calculate_quantiles,dim='time') - -# tide_cq_dict[str(x)]=tide_cq - -# # Calculate the tide-height difference between the elevation value and -# # each percentile value per pixel -# diff = abs(tide_cq - dem) - -# # Take the percentile of the smallest tide-height difference as the -# # exposure % per pixel -# idxmin = diff.idxmin(dim="quantile") - -# # Convert to percentage -# exposure['lowtide_exp'] = idxmin * 100 - -# for x in timeranges: - -# # Run the pixel_tides function with the calculate_quantiles option. -# # For each pixel, an array of tideheights is returned, corresponding -# # to the percentiles from `calculate_quantiles` of the timerange-tide model that -# # each tideheight appears in the model. -# # tide_cq, _ = pixel_tides( -# # dem, -# # resample=True, -# # calculate_quantiles=calculate_quantiles, -# # times=timeranges[str(x)], -# # model=tide_model, -# # directory=tide_model_dir, -# # cutoff=np.inf, -# # ) + tide_cq = highlows_all_unstacked.tide_m.quantile(q=calculate_quantiles,dim='time') -# if (tide_model[0] == "ensemble") or (tide_model == "ensemble"): -# # Use ensemble model combining multiple input ocean tide models -# tide_cq, _ = pixel_tides_ensemble( -# dem, -# # resample=True, -# calculate_quantiles=calculate_quantiles, -# # times=timeranges[str(x)], -# times=time_range, -# # times=time_range, -# directory=tide_model_dir, -# cutoff=np.inf, -# ancillary_points="data/raw/corr_points.geojson", -# ) - -# else: -# # Use single input ocean tide model -# tide_cq, _ = pixel_tides( -# dem, -# resample=True, -# calculate_quantiles=calculate_quantiles, -# # times=timeranges[str(x)], -# times=time_range, -# model=tide_model, -# directory=tide_model_dir, -# cutoff=np.inf,) - -# tide_cq_dict[str(x)] = tide_cq - -# # Calculate the tide-height difference between the elevation value and -# # each percentile value per pixel -# diff = abs(tide_cq - dem) - -# # Take the percentile of the smallest tide-height difference as the -# # exposure % per pixel -# idxmin = diff.idxmin(dim="quantile") - -# # Convert to percentage -# exposure[str(x)] = idxmin * 100 - -# # return exposure, tide_cq + # Add tide_cq to output dict + tide_cq_dict[str(x)]=tide_cq + + # Calculate the tide-height difference between the elevation value and + # each percentile value per pixel + diff = abs(tide_cq - dem) + + # Take the percentile of the smallest tide-height difference as the + # exposure % per pixel + idxmin = diff.idxmin(dim="quantile") + + # Convert to percentage + exposure['Lowtide'] = idxmin * 100 -# if filters is None: - -# # Run the pixel_tides function with the calculate_quantiles option. -# # For each pixel, an array of tideheights is returned, corresponding -# # to the percentiles from `calculate_quantiles` of the timerange-tide model that -# # each tideheight appears in the model. -# # tide_cq, _ = pixel_tides( -# # dem, -# # resample=True, -# # calculate_quantiles=calculate_quantiles, -# # times=time_range, -# # model=tide_model, -# # directory=tide_model_dir, -# # cutoff=np.inf, -# # ) - -# if (tide_model[0] == "ensemble") or (tide_model == "ensemble"): -# # Use ensemble model combining multiple input ocean tide models -# tide_cq, _ = pixel_tides_ensemble( -# dem, -# # resample=True, -# calculate_quantiles=calculate_quantiles, -# # times=timeranges[str(x)], -# times=time_range, -# # times=time_range, -# directory=tide_model_dir, -# cutoff=np.inf, -# ancillary_points="data/raw/corr_points.geojson", -# ) - -# else: -# # Use single input ocean tide model -# tide_cq, _ = pixel_tides( -# dem, -# resample=True, -# calculate_quantiles=calculate_quantiles, -# # times=timeranges[str(x)], -# times=time_range, -# model=tide_model, -# directory=tide_model_dir, -# cutoff=np.inf, -# ) - -# tide_cq_dict['all_epoch']=tide_cq -# # Calculate the tide-height difference between the elevation value and -# # each percentile value per pixel -# diff = abs(tide_cq - dem) - -# # Take the percentile of the smallest tide-height difference as the -# # exposure % per pixel -# idxmin = diff.idxmin(dim="quantile") - -# # Convert to percentage -# exposure['all_epoch_exp'] = idxmin * 100 - -# return exposure, tide_cq_dict, filt_dt #filt_dt is temp and only works with spatial customs -# # return exposure - -# # # Run the pixel_tides function with the calculate_quantiles option. -# # # For each pixel, an array of tideheights is returned, corresponding -# # # to the percentiles from `calculate_quantiles` of the timerange-tide model that -# # # each tideheight appears in the model. -# # tide_cq, _ = pixel_tides( -# # dem, -# # resample=True, -# # calculate_quantiles=calculate_quantiles, -# # times=time_range, -# # model=tide_model, -# # directory=tide_model_dir, -# # cutoff=np.inf, -# # ) - -# # # Calculate the tide-height difference between the elevation value and -# # # each percentile value per pixel -# # diff = abs(tide_cq - dem) - -# # # Take the percentile of the smallest tide-height difference as the -# # # exposure % per pixel -# # idxmin = diff.idxmin(dim="quantile") - -# # # Convert to percentage -# # exposure = idxmin * 100 - -# # return exposure, tide_cq, time_range + ## Intersect the filters of interest to extract the common datetimes for calc of combined filters + if filters_combined is not None: + for x in filters_combined: + y=x[0] + z=x[1] + timeranges[str(y+"_"+z)] = timeranges[y].intersection(timeranges[z]) + + ## Generator expression to calculate exposure for each nominated filter in temporal_filters + # Don't calculate exposure for spatial filters. This has already been calculated. + gen = (x for x in timeranges if x not in spatial_filters) + + for x in gen: + # Run the pixel_tides function with the calculate_quantiles option. + # For each pixel, an array of tideheights is returned, corresponding + # to the percentiles from `calculate_quantiles` of the timerange-tide model that + # each tideheight appears in the model. + + if (tide_model[0] == "ensemble") or (tide_model == "ensemble"): + # Use ensemble model combining multiple input ocean tide models + tide_cq, _ = pixel_tides_ensemble( + dem, + calculate_quantiles=calculate_quantiles, + times=timeranges[str(x)], + directory=tide_model_dir, + ancillary_points="data/raw/tide_correlations_2017-2019.geojson", + top_n=3, + reduce_method='mean', + resolution=3000, + ) + + else: + # Use single input ocean tide model + tide_cq, _ = pixel_tides_ensemble( + dem, + resample=True, + calculate_quantiles=calculate_quantiles, + times=timeranges[str(x)], + model=tide_model, + directory=tide_model_dir, + ) + + # Add tide_cq to output dict + tide_cq_dict[str(x)]=tide_cq + + # Calculate the tide-height difference between the elevation value and + # each percentile value per pixel + diff = abs(tide_cq - dem) + + # Take the percentile of the smallest tide-height difference as the + # exposure % per pixel + idxmin = diff.idxmin(dim="quantile") + + # Convert to percentage + exposure[str(x)] = idxmin * 100 + + + return exposure, tide_cq_dict + diff --git a/notebooks/Intertidal_workflow.ipynb b/notebooks/Intertidal_workflow.ipynb index e02e27e9..2ab84b47 100644 --- a/notebooks/Intertidal_workflow.ipynb +++ b/notebooks/Intertidal_workflow.ipynb @@ -25,7 +25,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "/home/jovyan/Robbi/dea-intertidal\n" + "/home/jovyan/dea_intertidal/dea-intertidal\n" ] } ], @@ -43,12 +43,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "a9e5e54a", "metadata": { "tags": [] }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], "source": [ "pip install -r requirements.in --quiet" ] @@ -63,7 +71,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "id": "06f536eb", "metadata": { "tags": [] @@ -123,7 +131,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 23, "id": "f00107c2", "metadata": { "tags": [] @@ -133,19 +141,19 @@ "# Intertidal Elevation variables\n", "start_date = \"2019\" # Start date for analysis\n", "end_date = \"2021\" # End date for analysis\n", - "resolution = 10 # Spatial resolution used for output files\n", + "resolution = 300 # Spatial resolution used for output files\n", "crs = \"EPSG:3577\" # Coordinate Reference System (CRS) to use for output files\n", "ndwi_thresh = 0.1 # Threshold used to identify dry/wet transition\n", "include_s2 = True # Include Sentinel-2 data in the analysis?\n", "include_ls = True # Include Landsat data in the analysis?\n", "filter_gqa = True # Filter to remove poorly georeferenced scenes?\n", "tide_model = \"ensemble\" # Tide model to use in analysis\n", - "# tide_model_dir = \"/var/share/tide_models\" # Directory containing tide model files\n", - "# tide_model = [\"FES2014\", \"FES2012\", \"TPXO9-atlas-v5\"]\n", "tide_model_dir = \"/gdata1/data/tide_models_clipped\"\n", "\n", "# Exposure variables\n", "modelled_freq = \"3h\" # Frequency to run tidal model e.g '30min' or '1h'\n", + "# filters=[None] # Exposure filters.\n", + "# filters_combined = None ## Must be a list of tuples containing one temporal and spatial filter each\n", "\n", "# Generate range of times covering entire period of satellite record for exposure and bias/offset calculation\n", "all_timerange = pd.date_range(\n", @@ -167,7 +175,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "id": "a54c5653", "metadata": { "tags": [] @@ -191,7 +199,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "e35efaea", "metadata": { "tags": [] @@ -219,7 +227,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 7, "id": "9895b5c5", "metadata": { "tags": [] @@ -228,7 +236,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4a62156ea3c64cb49bba75cee7a9c232", + "model_id": "a0dc3aead68c47488f433021a8814257", "version_major": 2, "version_minor": 0 }, @@ -242,13 +250,13 @@ { "data": { "image/svg+xml": [ - "" + "" ], "text/plain": [ - "Geometry(POLYGON ((131.853962 -12.233161, 131.853962 -12.194405, 131.90546 -12.194405, 131.90546 -12.233161, 131.853962 -12.233161)), EPSG:4326)" + "Geometry(POLYGON ((123.003119 -16.42242, 123.003119 -16.392615, 123.036788 -16.392615, 123.036788 -16.42242, 123.003119 -16.42242)), EPSG:4326)" ] }, - "execution_count": 4, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -275,7 +283,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 8, "id": "7b142abf", "metadata": { "tags": [] @@ -288,7 +296,7 @@ "
\n", "
\n", "

Client

\n", - "

Client-4ff76940-9e0e-11ee-8711-125a4a0f4bb6

\n", + "

Client-3f672603-b995-11ee-8188-1694c49cbea6

\n", " \n", "\n", " \n", @@ -301,7 +309,7 @@ " \n", " \n", " \n", " \n", " \n", @@ -310,7 +318,7 @@ "
\n", - " Dashboard: /user/robbi.bishoptaylor@ga.gov.au/proxy/8787/status\n", + " Dashboard: /user/claire.phillips@ga.gov.au/proxy/8787/status\n", "
\n", "\n", " \n", - " \n", " \n", @@ -323,11 +331,11 @@ "
\n", "
\n", "

LocalCluster

\n", - "

ad298c53

\n", + "

15e993e2

\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", @@ -360,11 +368,11 @@ "
\n", "
\n", "

Scheduler

\n", - "

Scheduler-1aeebfa9-815b-4d0e-a56f-e503fcfdcdb3

\n", + "

Scheduler-08eafef8-fd05-4f4f-b296-f64ba375a7d5

\n", "
\n", - " Dashboard: /user/robbi.bishoptaylor@ga.gov.au/proxy/8787/status\n", + " Dashboard: /user/claire.phillips@ga.gov.au/proxy/8787/status\n", " \n", " Workers: 1\n", @@ -335,10 +343,10 @@ "
\n", - " Total threads: 7\n", + " Total threads: 15\n", " \n", - " Total memory: 59.21 GiB\n", + " Total memory: 117.21 GiB\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", @@ -383,7 +391,7 @@ " Started: Just now\n", " \n", " \n", " \n", "
\n", - " Comm: tcp://127.0.0.1:41485\n", + " Comm: tcp://127.0.0.1:36573\n", " \n", " Workers: 1\n", @@ -372,10 +380,10 @@ "
\n", - " Dashboard: /user/robbi.bishoptaylor@ga.gov.au/proxy/8787/status\n", + " Dashboard: /user/claire.phillips@ga.gov.au/proxy/8787/status\n", " \n", - " Total threads: 7\n", + " Total threads: 15\n", "
\n", - " Total memory: 59.21 GiB\n", + " Total memory: 117.21 GiB\n", "
\n", @@ -406,29 +414,29 @@ " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", @@ -455,7 +463,7 @@ "" ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -466,14 +474,14 @@ "output_type": "stream", "text": [ "\n", - "Dimensions: (time: 361, y: 423, x: 572)\n", + "Dimensions: (time: 338, y: 12, x: 14)\n", "Coordinates:\n", - " * time (time) datetime64[ns] 2019-01-07T01:16:28.775870 ... 2021-12...\n", - " * y (y) float64 -1.285e+06 -1.285e+06 ... -1.29e+06 -1.29e+06\n", - " * x (x) float64 -1.62e+04 -1.618e+04 ... -1.05e+04 -1.048e+04\n", + " * time (time) datetime64[ns] 2019-01-02T01:43:54.866588 ... 2021-12...\n", + " * y (y) float64 -1.779e+06 -1.779e+06 ... -1.782e+06 -1.782e+06\n", + " * x (x) float64 -9.646e+05 -9.644e+05 ... -9.61e+05 -9.608e+05\n", " spatial_ref int32 3577\n", "Data variables:\n", - " ndwi (time, y, x) float32 dask.array\n", + " ndwi (time, y, x) float32 dask.array\n", "Attributes:\n", " crs: EPSG:3577\n", " grid_mapping: spatial_ref\n" @@ -493,8 +501,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 11 s, sys: 866 ms, total: 11.8 s\n", - "Wall time: 1min 23s\n" + "CPU times: user 6.66 s, sys: 246 ms, total: 6.91 s\n", + "Wall time: 46.1 s\n" ] }, { @@ -864,98 +872,96 @@ " fill: currentColor;\n", "}\n", "
<xarray.Dataset>\n",
-       "Dimensions:      (time: 361, y: 423, x: 572)\n",
+       "Dimensions:      (time: 338, y: 12, x: 14)\n",
        "Coordinates:\n",
-       "  * time         (time) datetime64[ns] 2019-01-07T01:16:28.775870 ... 2021-12...\n",
-       "  * y            (y) float64 -1.285e+06 -1.285e+06 ... -1.29e+06 -1.29e+06\n",
-       "  * x            (x) float64 -1.62e+04 -1.618e+04 ... -1.05e+04 -1.048e+04\n",
+       "  * time         (time) datetime64[ns] 2019-01-02T01:43:54.866588 ... 2021-12...\n",
+       "  * y            (y) float64 -1.779e+06 -1.779e+06 ... -1.782e+06 -1.782e+06\n",
+       "  * x            (x) float64 -9.646e+05 -9.644e+05 ... -9.61e+05 -9.608e+05\n",
        "    spatial_ref  int32 3577\n",
        "Data variables:\n",
-       "    ndwi         (time, y, x) float32 0.5696 0.5706 0.572 ... -0.1079 -0.1076\n",
+       "    ndwi         (time, y, x) float32 -0.3002 -0.2479 -0.1653 ... nan 0.03262\n",
        "Attributes:\n",
        "    crs:           EPSG:3577\n",
-       "    grid_mapping:  spatial_ref
  • crs :
    EPSG:3577
    grid_mapping :
    spatial_ref
  • " ], "text/plain": [ "\n", - "Dimensions: (time: 361, y: 423, x: 572)\n", + "Dimensions: (time: 338, y: 12, x: 14)\n", "Coordinates:\n", - " * time (time) datetime64[ns] 2019-01-07T01:16:28.775870 ... 2021-12...\n", - " * y (y) float64 -1.285e+06 -1.285e+06 ... -1.29e+06 -1.29e+06\n", - " * x (x) float64 -1.62e+04 -1.618e+04 ... -1.05e+04 -1.048e+04\n", + " * time (time) datetime64[ns] 2019-01-02T01:43:54.866588 ... 2021-12...\n", + " * y (y) float64 -1.779e+06 -1.779e+06 ... -1.782e+06 -1.782e+06\n", + " * x (x) float64 -9.646e+05 -9.644e+05 ... -9.61e+05 -9.608e+05\n", " spatial_ref int32 3577\n", "Data variables:\n", - " ndwi (time, y, x) float32 0.5696 0.5706 0.572 ... -0.1079 -0.1076\n", + " ndwi (time, y, x) float32 -0.3002 -0.2479 -0.1653 ... nan 0.03262\n", "Attributes:\n", " crs: EPSG:3577\n", " grid_mapping: spatial_ref" ] }, - "execution_count": 5, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -977,6 +983,7 @@ " resolution=resolution,\n", " crs=crs,\n", " include_s2=True,\n", + " \n", " include_ls=True,\n", " filter_gqa=filter_gqa,\n", " max_cloudcover=90,\n", @@ -1001,7 +1008,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 9, "id": "2adcc77b", "metadata": { "tags": [] @@ -1025,7 +1032,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 10, "id": "45de9453-5ca0-4879-85fd-09864229bbb2", "metadata": { "tags": [] @@ -1035,7 +1042,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "2023-12-19 01:36:32 INFO Modelling tide heights for each pixel\n" + "2024-01-23 02:16:02 INFO Modelling tide heights for each pixel\n" ] }, { @@ -1043,44 +1050,45 @@ "output_type": "stream", "text": [ "Creating reduced resolution 5000 x 5000 metre tide modelling array\n", - "Modelling tides using FES2014 in parallel\n" + "Modelling tides using FES2014, FES2012, TPXO8-atlas-v1, TPXO9-atlas-v5, EOT20, HAMTIDE11, GOT4.10 in parallel\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 5/5 [00:10<00:00, 2.09s/it]\n" + "100%|██████████| 35/35 [00:20<00:00, 1.71it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Reprojecting tides into original array\n" + "Returning low resolution tide array\n", + "Generating ensemble tide model from point inputs\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2023-12-19 01:36:47 INFO Masking nodata and adding tide heights to satellite data array\n", - "2023-12-19 01:36:48 INFO Flattening satellite data array and filtering to intertidal candidate pixels\n", - "2023-12-19 01:36:48 INFO Applying valid data mask to constrain study area\n", - "2023-12-19 01:36:51 INFO Running per-pixel rolling median\n" + "2024-01-23 02:16:26 INFO Masking nodata and adding tide heights to satellite data array\n", + "2024-01-23 02:16:26 INFO Flattening satellite data array and filtering to intertidal candidate pixels\n", + "2024-01-23 02:16:26 INFO Applying valid data mask to constrain study area\n", + "2024-01-23 02:16:26 INFO Running per-pixel rolling median\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Reducing analysed pixels from 241956 to 81945 (33.87%)\n" + "Reducing analysed pixels from 168 to 33 (19.64%)\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c8cfe569fc9e4005b662cb5909b03e86", + "model_id": "06ee36199cb04c9685168354cd1a5e8f", "version_major": 2, "version_minor": 0 }, @@ -1095,7 +1103,11 @@ "name": "stderr", "output_type": "stream", "text": [ - "2023-12-19 01:38:05 INFO Modelling intertidal elevation\n" + "2024-01-23 02:16:26 INFO Modelling intertidal elevation\n", + "2024-01-23 02:16:26 INFO Modelling intertidal uncertainty\n", + "2024-01-23 02:16:26 INFO Unflattening data back to its original spatial dimensions\n", + "2024-01-23 02:16:26 INFO Cleaning inaccurate upper intertidal pixels\n", + "2024-01-23 02:16:26 INFO Successfully completed intertidal elevation modelling\n" ] }, { @@ -1105,19 +1117,11 @@ "Applying tidal interval interpolation to 200 intervals\n", "Applying rolling mean smoothing with radius 20\n" ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2023-12-19 01:38:06 INFO Modelling intertidal uncertainty\n", - "2023-12-19 01:38:09 INFO Unflattening data back to its original spatial dimensions\n", - "2023-12-19 01:38:09 INFO Cleaning inaccurate upper intertidal pixels\n", - "2023-12-19 01:38:09 INFO Successfully completed intertidal elevation modelling\n" - ] } ], "source": [ + "# %reload_ext autoreload\n", + "\n", "# Model elevation for each pixel\n", "ds, ds_aux, tide_m = elevation(\n", " satellite_ds,\n", @@ -1139,7 +1143,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 11, "id": "f49adb23-1eb4-457b-bffe-c8b90e117c97", "metadata": { "tags": [] @@ -1153,14 +1157,25 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 16, "id": "08dbad9b-ad1e-46bd-a55c-dd442e6e8446", "metadata": { "tags": [] }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA7YAAAKZCAYAAACMd7fPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABUoUlEQVR4nO3de3wU9b3/8ffshlwgFwSBJCUhlIJc5BIIIDcJSAVUDthWlHLkUkTbQ8SIIFLlIncVLSDKTSUcCwc9pwhqK15iEhTlblCKAkYw0QIBxYRECCG7vz9s9ucKQQKTmczm9Xw85vFgZ2fn+9kMrfnw/s53DK/X6xUAAAAAAA7lsrsAAAAAAACuBI0tAAAAAMDRaGwBAAAAAI5GYwsAAAAAcDQaWwAAAACAo9HYAgAAAAAcjcYWAAAAAOBoNLYAAAAAAEejsQUAAAAAOBqNLQAAAADUAKNGjdKQIUMuekxycrJSU1Mv+ZyZmZkyDEPfffddhccYhqENGzZc8jkvB40tAAAAAFRgxowZMgzDb2vZsuXPfqZDhw6VGichIUELFy68/EJ/5PDhwzIMQ9nZ2X77Fy1apLS0NFPGqG6C7C4AAAAAAKqzNm3a6J133vG9Dgqqvm3U2bNnK3wvKirKwkqsRWILAAAAABcRFBSk6Oho33b11VdX6vPlU4AXLFigmJgY1a9fX+PGjVNpaamkH6b/fvnll7r//vt9qXC5999/X7169VJYWJji4uI0fvx4FRcX+95PSEjQrFmzNGLECEVGRuruu+9W06ZNJUmJiYkyDEPJycl+dZQrLi7WiBEjFB4erpiYGD355JPn1f7iiy8qKSlJERERio6O1u9//3vl5+dX6vtL0okTJ3Trrbeqdu3aat68uV599VW/9//5z3/qlltuUWRkpCIiItSrVy/l5ORc8vmr3T81eDwe/etf/1JERITfBQUAAADgz+v16tSpU4qNjZXL5bzM6syZMxdNGKuK1+s9r9cICQlRSEjIBY8/ePCgYmNjFRoaqm7dumnevHmKj4+v1JgZGRmKiYlRRkaGPv/8c91+++3q0KGDxo4dq/Xr16t9+/a6++67NXbsWN9ncnJyNGDAAM2ePVsvvPCCjh8/rpSUFKWkpGjVqlW+4xYsWKBp06Zp+vTpkqRx48apS5cueuedd9SmTRsFBwdfsKZJkyYpKytLGzduVMOGDfXnP/9Zu3fv9ptGXVpaqlmzZumaa65Rfn6+JkyYoFGjRukf//hHpb7/o48+qscff1xPPPGEnn76aQ0fPlxffvml6tWrp6+//lrXX3+9kpOT9e677yoyMlJbtmzRuXPnLn0AbzWTl5fnlcTGxsbGxsbGxsbGdolbXl6e3b/GV9rp06e9QUGRtvy8wsPDz9s3ffr0C9b5j3/8w/vyyy979+zZ4920aZO3W7du3vj4eG9hYWGF32369One9u3b+16PHDnS26RJE++5c+d8+2677Tbv7bff7nvdpEkT71/+8he/84wZM8Z79913++177733vC6Xy3v69Gnf54YMGeJ3zKFDh7ySvB999JHf/pEjR3oHDx7s9Xq93lOnTnmDg4O9L7/8su/9b775xhsWFua97777KvxuO3bs8Erynjp1yuv1er0ZGRleSd6TJ09W+BlJ3kceecT3uqioyCvJ+8Ybb3i9Xq93ypQp3qZNm3rPnj1b4Tl+TrVLbCMiIiRJeXl5ioyMtLkaAAAABKJVJ56wuwRTnDlVooc6POH7HdpJzp49q3PnCtW27Xy53aGWjVtWdkaffPLQef1GRWntwIEDfX9u166dunbtqiZNmujll1/WmDFjLnncNm3ayO12+17HxMTok08+uehn9uzZo48//lhr1qzx7fN6vfJ4PDp06JBatWolSUpKSrrkOsrl5OTo7Nmz6tq1q29fvXr1dM011/gdt2vXLs2YMUN79uzRyZMn5fF4JEm5ublq3br1JY/Xrl0735/r1KmjyMhI35Tm7Oxs9erVS7Vq1ar09yhX7Rrb8ikBkZGRNLYAAACoEmEl1jVSVnDyLXxud6jc7jDLx73cfqNu3bpq0aKFPv/880p97qdNm2EYviaxIkVFRbrnnns0fvz489778VToOnXqVKqWS1VcXKz+/furf//+WrNmjRo0aKDc3Fz179+/0lPIL/b9w8Ku/PpXu8YWAAAAQM3hdbvl/VGSWeXj6crGKioqUk5Oju68806TKvpBcHCwysrK/PZ17NhR+/bt069+9atKn0vSeef7sWbNmqlWrVratm2br0k+efKkDhw4oN69e0uSPvvsM33zzTeaP3++4uLiJEk7d+6sVC2Xol27dlq9erVKS0svO7V13h3mAAAAAGCRiRMnKisrS4cPH9YHH3ygW2+9VW63W8OGDTN1nISEBG3e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f6nFixerc+fOKioqUnh4eKV/DmvXrtXx48e1Y8cO1atXT5L0q1/9qtLn+SnTE9t58+apc+fOioiIUMOGDTVkyBDt37/f7GEAAAAA4LLl5eWpoKDAt02ZMuWCx9x3331as2aNr4m8XG3atPE1nJIUExPzs1N69+zZo7S0NIWHh/u2/v37y+Px6NChQ77jkpKSKl1PTk6Ozp49q65du/r21atXT9dcc43fcbt27dKgQYMUHx+viIgI9e7dW5KUm5tb6TElKTs7W4mJib6m1iymJ7ZZWVkaN26cOnfurHPnzunPf/6zbrzxRu3bt0916tQxezgAAAAATuY6K7ksnEj673Q4MjJSkZGRFz10165dys/PV8eOHX37ysrKtHnzZi1ZskQlJSV+zerF1KpVy++1YRg/O/22qKhI99xzj8aPH3/ee/Hx8b4/V1WfVVxcrP79+6t///5as2aNGjRooNzcXPXv3/+ii1RdTFhYmMlV/sD0v0GbNm3ye52WlqaGDRtq165duv76680eDgAAAACqxA033KBPPvnEb9/o0aPVsmVLTZ48+ZKb2ksRHByssrIyv30dO3bUvn37Kj1VNzg4WJLOO9+PNWvWTLVq1dK2bdt8TfLJkyd14MABXyr72Wef6ZtvvtH8+fN9U7d37txZqVp+ql27dnruuef07bffmpraVvniUQUFBZJketQMAAAAAFUpIiJC1157rd9Wp04d1a9fX9dee62pYyUkJGjz5s36+uuvdeLECUnS5MmT9cEHHyglJUXZ2dk6ePCgNm7ceN7iUT/VsGFDhYWFadOmTTp27JivJ/ux8PBwjRkzRpMmTdK7776rvXv3atSoUXK5/n+LGB8fr+DgYD399NP64osv9Oqrr2rWrFlX9D2HDRum6OhoDRkyRFu2bNEXX3yhv/3tb/rwww+v6LxV2th6PB6lpqaqR48eFV74kpKS81YkAwAAAFBDGBY/6sewcKGqSpg5c6YOHz6sZs2aqUGDBpJ+SDezsrJ04MAB9erVS4mJiZo2bZpiY2Mveq6goCAtXrxYy5cvV2xsrAYPHnzB45544gn16tVLgwYNUr9+/dSzZ0916tTJ936DBg2Ulpam//3f/1Xr1q01f/58LViw4Iq+Z3BwsN566y01bNhQN910k9q2bav58+dfcfpteL1e7xWd4SL+9Kc/6Y033tD7779/3upa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", + "text/plain": [ + "
    " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "# ## Plot\n", + "# ## Plot with labels\n", "# labels=['0 Dry',\n", "# '1 Intermittent\\n wet\\n inland',\n", "# '2 Wet inland',\n", @@ -1184,12 +1199,15 @@ }, "source": [ "### Intertidal exposure\n", - "Calculate exposure using the script function" + "Calculate exposure using the script function.\n", + "To calculate exposure for the full time period, leave `filters` commented out or set as ['unfiltered'].\n", + "See the function documentation for the full range of available filters and filter_combinations.\n", + "The code accepts lists of multiple filters and filter_combination tuples." ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 28, "id": "ad27ef63-3e62-4167-8369-0d6fa79bab8e", "metadata": { "tags": [] @@ -1199,15 +1217,16 @@ "name": "stdout", "output_type": "stream", "text": [ + "Calculating unfiltered exposure\n", "Creating reduced resolution 5000 x 5000 metre tide modelling array\n", - "Modelling tides using FES2014 in parallel\n" + "Modelling tides using FES2014, FES2012, TPXO8-atlas-v1, TPXO9-atlas-v5, EOT20, HAMTIDE11, GOT4.10 in parallel\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 5/5 [00:12<00:00, 2.55s/it]\n" + "100%|██████████| 35/35 [00:23<00:00, 1.50it/s]\n" ] }, { @@ -1215,29 +1234,488 @@ "output_type": "stream", "text": [ "Computing tide quantiles\n", - "Reprojecting tides into original array\n" + "Returning low resolution tide array\n", + "Generating ensemble tide model from point inputs\n" ] } ], "source": [ - "## Commented code relates to work-in-progress custom exposure filtering\n", + "%reload_ext autoreload\n", "\n", - "# ds[\"exposure\"], tide_cq = exposure(\n", - "# start_date=start_date,\n", - "# end_date=end_date,\n", - "# dem=ds.elevation,\n", - "# time_range=all_timerange,\n", - "# tide_model=tide_model,\n", - "# tide_model_dir=tide_model_dir,\n", - "# # mod_timesteps = modelled_freq,\n", - "# )\n", - "\n", - "ds[\"exposure\"], tide_cq = exposure(\n", + "exposure_filters, tide_cq_dict = exposure(\n", " dem=ds.elevation,\n", " time_range=all_timerange,\n", + " modelled_freq = modelled_freq,\n", " tide_model=tide_model,\n", " tide_model_dir=tide_model_dir,\n", - ")" + " # filters=filters,\n", + " # filters_combined=filters_combined,\n", + ")\n", + "\n", + "for x in list(exposure_filters.keys()):\n", + " ds['exposure_'+str(x)]=exposure_filters[str(x)]" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "9e1ec86b-1130-4556-8a99-79245aa9f1c5", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
    <xarray.Dataset>\n",
    +       "Dimensions:      (y: 12, x: 14, quantile: 1001)\n",
    +       "Coordinates:\n",
    +       "  * y            (y) float64 -1.779e+06 -1.779e+06 ... -1.782e+06 -1.782e+06\n",
    +       "  * x            (x) float64 -9.646e+05 -9.644e+05 ... -9.61e+05 -9.608e+05\n",
    +       "  * quantile     (quantile) float64 0.0 0.001 0.002 0.003 ... 0.998 0.999 1.0\n",
    +       "    spatial_ref  int32 3577\n",
    +       "Data variables:\n",
    +       "    unfiltered   (quantile, y, x) float32 -4.121 -4.118 -4.116 ... 3.676 3.677
    " + ], + "text/plain": [ + "\n", + "Dimensions: (y: 12, x: 14, quantile: 1001)\n", + "Coordinates:\n", + " * y (y) float64 -1.779e+06 -1.779e+06 ... -1.782e+06 -1.782e+06\n", + " * x (x) float64 -9.646e+05 -9.644e+05 ... -9.61e+05 -9.608e+05\n", + " * quantile (quantile) float64 0.0 0.001 0.002 0.003 ... 0.998 0.999 1.0\n", + " spatial_ref int32 3577\n", + "Data variables:\n", + " unfiltered (quantile, y, x) float32 -4.121 -4.118 -4.116 ... 3.676 3.677" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tide_cq_dict" ] }, { @@ -1246,12 +1724,14 @@ "metadata": {}, "source": [ "### Spread and offset\n", - "Calculate the spread and high/low tide biases of input observed images as a percentage of the modelled tide heights" + "Calculate the spread and high/low tide biases of input observed images as a percentage of the modelled tide heights.\n", + "\n", + "Warning: this code will only work if the exposure function has been run and produced 'unfiltered' exposure results.\n" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 31, "id": "ccc3123d", "metadata": { "tags": [] @@ -1267,7 +1747,7 @@ " ds[\"oa_offset_lowtide\"],\n", " ds[\"oa_offset_hightide\"],\n", ") = bias_offset(\n", - " tide_m=tide_m, tide_cq=tide_cq, extents=ds.extents, lot_hot=True, lat_hat=True\n", + " tide_m=tide_m, tide_cq=tide_cq_dict['unfiltered'], extents=ds.extents, lot_hot=True, lat_hat=True\n", ")" ] }, @@ -1281,7 +1761,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 32, "id": "eec0081d", "metadata": { "tags": [] @@ -1306,7 +1786,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 33, "id": "b80d35e1", "metadata": { "tags": [] @@ -1679,180 +2159,478 @@ " fill: currentColor;\n", "}\n", "
    <xarray.Dataset>\n",
    -       "Dimensions:                (y: 423, x: 572)\n",
    +       "Dimensions:                (y: 12, x: 14)\n",
            "Coordinates:\n",
    -       "  * y                      (y) float64 -1.285e+06 -1.285e+06 ... -1.29e+06\n",
    -       "  * x                      (x) float64 -1.62e+04 -1.618e+04 ... -1.048e+04\n",
    +       "  * y                      (y) float64 -1.779e+06 -1.779e+06 ... -1.782e+06\n",
    +       "  * x                      (x) float64 -9.646e+05 -9.644e+05 ... -9.608e+05\n",
            "    spatial_ref            int32 3577\n",
    -       "    tide_model             <U7 'FES2014'\n",
            "    band                   int64 1\n",
    -       "Data variables:\n",
    -       "    elevation              (y, x) float64 nan nan nan ... -0.3889 -0.393 -0.3986\n",
    -       "    elevation_uncertainty  (y, x) float64 nan nan nan ... 0.3478 0.3398 0.3285\n",
    -       "    extents                (y, x) float64 3.0 3.0 3.0 3.0 ... 5.0 5.0 5.0 5.0\n",
    -       "    exposure               (y, x) float64 nan nan nan nan ... 42.0 42.0 41.0\n",
    -       "    oa_lat                 (y, x) float32 -3.362 -3.362 -3.362 ... -3.408 -3.408\n",
    -       "    oa_hat                 (y, x) float32 2.944 2.944 2.944 ... 2.971 2.971\n",
    -       "    oa_lot                 (y, x) float32 -2.484 -2.484 -2.484 ... -2.475 -2.475\n",
    -       "    oa_hot                 (y, x) float32 2.637 2.638 2.638 ... 2.699 2.699\n",
    -       "    oa_spread              (y, x) float32 81.22 81.22 81.22 ... 81.1 81.1 81.1\n",
    -       "    oa_offset_lowtide      (y, x) float32 13.92 13.92 13.92 ... 14.63 14.63\n",
    -       "    oa_offset_hightide     (y, x) float32 4.865 4.864 4.863 ... 4.267 4.267
    " + "Data variables: (12/14)\n", + " elevation (y, x) float64 nan nan nan nan ... nan nan nan nan\n", + " elevation_uncertainty (y, x) float64 nan nan nan nan ... nan nan nan nan\n", + " extents (y, x) float64 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 3.0\n", + " exposure_Hightide (y, x) float64 nan nan nan nan ... nan nan nan nan\n", + " exposure_wet (y, x) float64 nan nan nan nan ... nan nan nan nan\n", + " exposure_wet_Hightide (y, x) float64 nan nan nan nan ... nan nan nan nan\n", + " ... ...\n", + " oa_hat (y, x) float32 nan nan nan nan ... nan nan nan 3.677\n", + " oa_lot (y, x) float32 nan nan nan nan ... nan nan nan -3.154\n", + " oa_hot (y, x) float32 nan nan nan nan ... nan nan nan 2.637\n", + " oa_spread (y, x) float32 nan nan nan nan ... nan nan nan 75.52\n", + " oa_offset_lowtide (y, x) float32 nan nan nan nan ... nan nan nan 10.92\n", + " oa_offset_hightide (y, x) float32 nan nan nan nan ... nan nan nan 13.56" ], "text/plain": [ "\n", - "Dimensions: (y: 423, x: 572)\n", + "Dimensions: (y: 12, x: 14)\n", "Coordinates:\n", - " * y (y) float64 -1.285e+06 -1.285e+06 ... -1.29e+06\n", - " * x (x) float64 -1.62e+04 -1.618e+04 ... -1.048e+04\n", + " * y (y) float64 -1.779e+06 -1.779e+06 ... -1.782e+06\n", + " * x (x) float64 -9.646e+05 -9.644e+05 ... -9.608e+05\n", " spatial_ref int32 3577\n", - " tide_model " ] @@ -1925,7 +2703,7 @@ "ax_dict[\"B\"].set_facecolor(\"#2E2E2E\")\n", "\n", "# Plot Exposure\n", - "ds[\"exposure\"].plot.imshow(\n", + "ds[\"exposure_unfiltered\"].plot.imshow(\n", " ax=ax_dict[\"C\"],\n", " cmap=\"RdYlGn\",\n", " levels=np.arange(0, 100, 1),\n", @@ -2049,18 +2827,6 @@ "## Export layers" ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "1e0658e8-72f4-4f85-a824-8f3701dd082e", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# study_area = 'Perth_5pxlandusebuffer'" - ] - }, { "cell_type": "code", "execution_count": null, From 54d951e2b75af75040e88db6b8331fc83504b9f3 Mon Sep 17 00:00:00 2001 From: Claire Phillips Date: Thu, 1 Feb 2024 04:59:25 +0000 Subject: [PATCH 2/3] small change returning calculation of time_range to exposure calculation and updating exposure call in notebook --- intertidal/exposure.py | 9 +- notebooks/Intertidal_workflow.ipynb | 1653 +++------------------------ 2 files changed, 182 insertions(+), 1480 deletions(-) diff --git a/intertidal/exposure.py b/intertidal/exposure.py index dfb83752..d4d81cd3 100644 --- a/intertidal/exposure.py +++ b/intertidal/exposure.py @@ -21,7 +21,8 @@ def exposure( dem, - time_range, + start_date, + end_date, modelled_freq = "30min", tide_model="ensemble", tide_model_dir="/var/share/tide_models", @@ -97,6 +98,12 @@ def exposure( - if filters is set to `None`, no exposure will be calculated and the program will fail unless a tuple is nominated in `filters_combined` """ + # Generate range of times covering entire period of satellite record for exposure and bias/offset calculation + time_range = pd.date_range( + start=round_date_strings(start_date, round_type="start"), + end=round_date_strings(end_date, round_type="end"), + freq=modelled_freq, + ) # Separate 'filters' into spatial and temporal categories to define # which exposure workflow to use diff --git a/notebooks/Intertidal_workflow.ipynb b/notebooks/Intertidal_workflow.ipynb index 2ab84b47..d2e349e7 100644 --- a/notebooks/Intertidal_workflow.ipynb +++ b/notebooks/Intertidal_workflow.ipynb @@ -131,7 +131,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 4, "id": "f00107c2", "metadata": { "tags": [] @@ -139,9 +139,9 @@ "outputs": [], "source": [ "# Intertidal Elevation variables\n", - "start_date = \"2019\" # Start date for analysis\n", - "end_date = \"2021\" # End date for analysis\n", - "resolution = 300 # Spatial resolution used for output files\n", + "start_date = \"2020\" # Start date for analysis\n", + "end_date = \"2022\" # End date for analysis\n", + "resolution = 10 # Spatial resolution used for output files\n", "crs = \"EPSG:3577\" # Coordinate Reference System (CRS) to use for output files\n", "ndwi_thresh = 0.1 # Threshold used to identify dry/wet transition\n", "include_s2 = True # Include Sentinel-2 data in the analysis?\n", @@ -155,27 +155,48 @@ "# filters=[None] # Exposure filters.\n", "# filters_combined = None ## Must be a list of tuples containing one temporal and spatial filter each\n", "\n", - "# Generate range of times covering entire period of satellite record for exposure and bias/offset calculation\n", - "all_timerange = pd.date_range(\n", - " start=round_date_strings(start_date, round_type=\"start\"),\n", - " end=round_date_strings(end_date, round_type=\"end\"),\n", - " freq=modelled_freq,\n", - ")" + "# # Generate range of times covering entire period of satellite record for exposure and bias/offset calculation\n", + "# all_timerange = pd.date_range(\n", + "# start=round_date_strings(start_date, round_type=\"start\"),\n", + "# end=round_date_strings(end_date, round_type=\"end\"),\n", + "# freq=modelled_freq,\n", + "# )" ] }, { "cell_type": "markdown", - "id": "65b1e0b2", + "id": "442c9d4a-0165-4e16-a1a6-1f1f4ffc8c39", "metadata": {}, "source": [ - "#### Set study area\n", + "#### Set study area" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8e73b86f-9749-45e9-a75c-d5741d8816a0", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# ##TEMP - recall stored validation geometry object to set geom for elevation calculation\n", + "# %store -r ds\n", "\n", + "# geom = ds.geobox.geographic_extent" + ] + }, + { + "cell_type": "markdown", + "id": "fd3f7a16-c62a-4108-8df1-b2dd8d49c9db", + "metadata": {}, + "source": [ "##### Option 1: load study area from 32 km tile GridSpec" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "a54c5653", "metadata": { "tags": [] @@ -199,7 +220,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "e35efaea", "metadata": { "tags": [] @@ -227,7 +248,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "id": "9895b5c5", "metadata": { "tags": [] @@ -236,7 +257,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a0dc3aead68c47488f433021a8814257", + "model_id": "3cb6c9c264bb46ca9861d181a255638c", "version_major": 2, "version_minor": 0 }, @@ -250,13 +271,13 @@ { "data": { "image/svg+xml": [ - "" + "" ], "text/plain": [ - "Geometry(POLYGON ((123.003119 -16.42242, 123.003119 -16.392615, 123.036788 -16.392615, 123.036788 -16.42242, 123.003119 -16.42242)), EPSG:4326)" + "Geometry(POLYGON ((116.547775 -20.585843, 116.547775 -20.566558, 116.566057 -20.566558, 116.566057 -20.585843, 116.547775 -20.585843)), EPSG:4326)" ] }, - "execution_count": 7, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -283,7 +304,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "id": "7b142abf", "metadata": { "tags": [] @@ -296,7 +317,7 @@ "
    \n", "
    \n", "

    Client

    \n", - "

    Client-3f672603-b995-11ee-8188-1694c49cbea6

    \n", + "

    Client-00d37937-c0b9-11ee-9b20-8a70e1ff1440

    \n", "
    \n", - " Comm: tcp://127.0.0.1:34605\n", + " Comm: tcp://127.0.0.1:40037\n", " \n", - " Total threads: 7\n", + " Total threads: 15\n", "
    \n", - " Dashboard: /user/robbi.bishoptaylor@ga.gov.au/proxy/37321/status\n", + " Dashboard: /user/claire.phillips@ga.gov.au/proxy/37553/status\n", " \n", - " Memory: 59.21 GiB\n", + " Memory: 117.21 GiB\n", "
    \n", - " Nanny: tcp://127.0.0.1:37405\n", + " Nanny: tcp://127.0.0.1:32849\n", "
    \n", - " Local directory: /tmp/dask-worker-space/worker-d6_5t8u8\n", + " Local directory: /tmp/dask-worker-space/worker-p_p1xl17\n", "
    \n", "\n", " \n", @@ -331,7 +352,7 @@ " \n", "
    \n", "

    LocalCluster

    \n", - "

    15e993e2

    \n", + "

    7a5c7c97

    \n", "
    \n", " \n", "
    \n", @@ -368,11 +389,11 @@ "
    \n", "
    \n", "

    Scheduler

    \n", - "

    Scheduler-08eafef8-fd05-4f4f-b296-f64ba375a7d5

    \n", + "

    Scheduler-5405bd62-7764-4420-9818-871c8ffb897a

    \n", " \n", " \n", " \n", "
    \n", - " Comm: tcp://127.0.0.1:36573\n", + " Comm: tcp://127.0.0.1:37581\n", " \n", " Workers: 1\n", @@ -414,7 +435,7 @@ " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", @@ -463,7 +484,7 @@ "" ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -474,14 +495,14 @@ "output_type": "stream", "text": [ "\n", - "Dimensions: (time: 338, y: 12, x: 14)\n", + "Dimensions: (time: 325, y: 237, x: 215)\n", "Coordinates:\n", - " * time (time) datetime64[ns] 2019-01-02T01:43:54.866588 ... 2021-12...\n", - " * y (y) float64 -1.779e+06 -1.779e+06 ... -1.782e+06 -1.782e+06\n", - " * x (x) float64 -9.646e+05 -9.644e+05 ... -9.61e+05 -9.608e+05\n", + " * time (time) datetime64[ns] 2020-01-01T01:55:31.756059 ... 2022-12...\n", + " * y (y) float64 -2.304e+06 -2.304e+06 ... -2.306e+06 -2.306e+06\n", + " * x (x) float64 -1.598e+06 -1.598e+06 ... -1.596e+06 -1.596e+06\n", " spatial_ref int32 3577\n", "Data variables:\n", - " ndwi (time, y, x) float32 dask.array\n", + " ndwi (time, y, x) float32 dask.array\n", "Attributes:\n", " crs: EPSG:3577\n", " grid_mapping: spatial_ref\n" @@ -501,8 +522,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 6.66 s, sys: 246 ms, total: 6.91 s\n", - "Wall time: 46.1 s\n" + "CPU times: user 5.23 s, sys: 504 ms, total: 5.73 s\n", + "Wall time: 37.1 s\n" ] }, { @@ -872,96 +893,98 @@ " fill: currentColor;\n", "}\n", "
    <xarray.Dataset>\n",
    -       "Dimensions:      (time: 338, y: 12, x: 14)\n",
    +       "Dimensions:      (time: 325, y: 237, x: 215)\n",
            "Coordinates:\n",
    -       "  * time         (time) datetime64[ns] 2019-01-02T01:43:54.866588 ... 2021-12...\n",
    -       "  * y            (y) float64 -1.779e+06 -1.779e+06 ... -1.782e+06 -1.782e+06\n",
    -       "  * x            (x) float64 -9.646e+05 -9.644e+05 ... -9.61e+05 -9.608e+05\n",
    +       "  * time         (time) datetime64[ns] 2020-01-01T01:55:31.756059 ... 2022-12...\n",
    +       "  * y            (y) float64 -2.304e+06 -2.304e+06 ... -2.306e+06 -2.306e+06\n",
    +       "  * x            (x) float64 -1.598e+06 -1.598e+06 ... -1.596e+06 -1.596e+06\n",
            "    spatial_ref  int32 3577\n",
            "Data variables:\n",
    -       "    ndwi         (time, y, x) float32 -0.3002 -0.2479 -0.1653 ... nan 0.03262\n",
    +       "    ndwi         (time, y, x) float32 nan nan nan ... -0.1535 -0.1542 -0.1555\n",
            "Attributes:\n",
            "    crs:           EPSG:3577\n",
    -       "    grid_mapping:  spatial_ref
  • crs :
    EPSG:3577
    grid_mapping :
    spatial_ref
  • " ], "text/plain": [ "\n", - "Dimensions: (time: 338, y: 12, x: 14)\n", + "Dimensions: (time: 325, y: 237, x: 215)\n", "Coordinates:\n", - " * time (time) datetime64[ns] 2019-01-02T01:43:54.866588 ... 2021-12...\n", - " * y (y) float64 -1.779e+06 -1.779e+06 ... -1.782e+06 -1.782e+06\n", - " * x (x) float64 -9.646e+05 -9.644e+05 ... -9.61e+05 -9.608e+05\n", + " * time (time) datetime64[ns] 2020-01-01T01:55:31.756059 ... 2022-12...\n", + " * y (y) float64 -2.304e+06 -2.304e+06 ... -2.306e+06 -2.306e+06\n", + " * x (x) float64 -1.598e+06 -1.598e+06 ... -1.596e+06 -1.596e+06\n", " spatial_ref int32 3577\n", "Data variables:\n", - " ndwi (time, y, x) float32 -0.3002 -0.2479 -0.1653 ... nan 0.03262\n", + " ndwi (time, y, x) float32 nan nan nan ... -0.1535 -0.1542 -0.1555\n", "Attributes:\n", " crs: EPSG:3577\n", " grid_mapping: spatial_ref" ] }, - "execution_count": 8, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -1008,7 +1031,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 7, "id": "2adcc77b", "metadata": { "tags": [] @@ -1032,7 +1055,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 8, "id": "45de9453-5ca0-4879-85fd-09864229bbb2", "metadata": { "tags": [] @@ -1042,7 +1065,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-01-23 02:16:02 INFO Modelling tide heights for each pixel\n" + "2024-02-01 04:19:28 INFO Modelling tide heights for each pixel\n" ] }, { @@ -1057,7 +1080,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 35/35 [00:20<00:00, 1.71it/s]\n" + "100%|██████████| 35/35 [00:19<00:00, 1.77it/s]\n" ] }, { @@ -1072,23 +1095,23 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-01-23 02:16:26 INFO Masking nodata and adding tide heights to satellite data array\n", - "2024-01-23 02:16:26 INFO Flattening satellite data array and filtering to intertidal candidate pixels\n", - "2024-01-23 02:16:26 INFO Applying valid data mask to constrain study area\n", - "2024-01-23 02:16:26 INFO Running per-pixel rolling median\n" + "2024-02-01 04:19:52 INFO Masking nodata and adding tide heights to satellite data array\n", + "2024-02-01 04:19:53 INFO Flattening satellite data array and filtering to intertidal candidate pixels\n", + "2024-02-01 04:19:53 INFO Applying valid data mask to constrain study area\n", + "2024-02-01 04:19:53 INFO Running per-pixel rolling median\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Reducing analysed pixels from 168 to 33 (19.64%)\n" + "Reducing analysed pixels from 50955 to 8141 (15.98%)\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "06ee36199cb04c9685168354cd1a5e8f", + "model_id": "9e8537d7507f4ff999103adc0dde4ffa", "version_major": 2, "version_minor": 0 }, @@ -1103,11 +1126,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-01-23 02:16:26 INFO Modelling intertidal elevation\n", - "2024-01-23 02:16:26 INFO Modelling intertidal uncertainty\n", - "2024-01-23 02:16:26 INFO Unflattening data back to its original spatial dimensions\n", - "2024-01-23 02:16:26 INFO Cleaning inaccurate upper intertidal pixels\n", - "2024-01-23 02:16:26 INFO Successfully completed intertidal elevation modelling\n" + "2024-02-01 04:20:05 INFO Modelling intertidal elevation\n", + "2024-02-01 04:20:05 INFO Modelling intertidal uncertainty\n" ] }, { @@ -1117,6 +1137,15 @@ "Applying tidal interval interpolation to 200 intervals\n", "Applying rolling mean smoothing with radius 20\n" ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-02-01 04:20:06 INFO Unflattening data back to its original spatial dimensions\n", + "2024-02-01 04:20:06 INFO Cleaning inaccurate upper intertidal pixels\n", + "2024-02-01 04:20:06 INFO Successfully completed intertidal elevation modelling\n" + ] } ], "source": [ @@ -1143,7 +1172,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 9, "id": "f49adb23-1eb4-457b-bffe-c8b90e117c97", "metadata": { "tags": [] @@ -1157,23 +1186,12 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 10, "id": "08dbad9b-ad1e-46bd-a55c-dd442e6e8446", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA7YAAAKZCAYAAACMd7fPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABUoUlEQVR4nO3de3wU9b3/8ffshlwgFwSBJCUhlIJc5BIIIDcJSAVUDthWlHLkUkTbQ8SIIFLlIncVLSDKTSUcCwc9pwhqK15iEhTlblCKAkYw0QIBxYRECCG7vz9s9ucKQQKTmczm9Xw85vFgZ2fn+9kMrfnw/s53DK/X6xUAAAAAAA7lsrsAAAAAAACuBI0tAAAAAMDRaGwBAAAAAI5GYwsAAAAAcDQaWwAAAACAo9HYAgAAAAAcjcYWAAAAAOBoNLYAAAAAAEejsQUAAAAAOBqNLQAAAADUAKNGjdKQIUMuekxycrJSU1Mv+ZyZmZkyDEPfffddhccYhqENGzZc8jkvB40tAAAAAFRgxowZMgzDb2vZsuXPfqZDhw6VGichIUELFy68/EJ/5PDhwzIMQ9nZ2X77Fy1apLS0NFPGqG6C7C4AAAAAAKqzNm3a6J133vG9Dgqqvm3U2bNnK3wvKirKwkqsRWILAAAAABcRFBSk6Oho33b11VdX6vPlU4AXLFigmJgY1a9fX+PGjVNpaamkH6b/fvnll7r//vt9qXC5999/X7169VJYWJji4uI0fvx4FRcX+95PSEjQrFmzNGLECEVGRuruu+9W06ZNJUmJiYkyDEPJycl+dZQrLi7WiBEjFB4erpiYGD355JPn1f7iiy8qKSlJERERio6O1u9//3vl5+dX6vtL0okTJ3Trrbeqdu3aat68uV599VW/9//5z3/qlltuUWRkpCIiItSrVy/l5ORc8vmr3T81eDwe/etf/1JERITfBQUAAADgz+v16tSpU4qNjZXL5bzM6syZMxdNGKuK1+s9r9cICQlRSEjIBY8/ePCgYmNjFRoaqm7dumnevHmKj4+v1JgZGRmKiYlRRkaGPv/8c91+++3q0KGDxo4dq/Xr16t9+/a6++67NXbsWN9ncnJyNGDAAM2ePVsvvPCCjh8/rpSUFKWkpGjVqlW+4xYsWKBp06Zp+vTpkqRx48apS5cueuedd9SmTRsFBwdfsKZJkyYpKytLGzduVMOGDfXnP/9Zu3fv9ptGXVpaqlmzZumaa65Rfn6+JkyYoFGjRukf//hHpb7/o48+qscff1xPPPGEnn76aQ0fPlxffvml6tWrp6+//lrXX3+9kpOT9e677yoyMlJbtmzRuXPnLn0AbzWTl5fnlcTGxsbGxsbGxsbGdolbXl6e3b/GV9rp06e9QUGRtvy8wsPDz9s3ffr0C9b5j3/8w/vyyy979+zZ4920aZO3W7du3vj4eG9hYWGF32369One9u3b+16PHDnS26RJE++5c+d8+2677Tbv7bff7nvdpEkT71/+8he/84wZM8Z79913++177733vC6Xy3v69Gnf54YMGeJ3zKFDh7ySvB999JHf/pEjR3oHDx7s9Xq93lOnTnmDg4O9L7/8su/9b775xhsWFua97777KvxuO3bs8Erynjp1yuv1er0ZGRleSd6TJ09W+BlJ3kceecT3uqioyCvJ+8Ybb3i9Xq93ypQp3qZNm3rPnj1b4Tl+TrVLbCMiIiRJeXl5ioyMtLkaAAAABKJVJ56wuwRTnDlVooc6POH7HdpJzp49q3PnCtW27Xy53aGWjVtWdkaffPLQef1GRWntwIEDfX9u166dunbtqiZNmujll1/WmDFjLnncNm3ayO12+17HxMTok08+uehn9uzZo48//lhr1qzx7fN6vfJ4PDp06JBatWolSUpKSrrkOsrl5OTo7Nmz6tq1q29fvXr1dM011/gdt2vXLs2YMUN79uzRyZMn5fF4JEm5ublq3br1JY/Xrl0735/r1KmjyMhI35Tm7Oxs9erVS7Vq1ar09yhX7Rrb8ikBkZGRNLYAAACoEmEl1jVSVnDyLXxud6jc7jDLx73cfqNu3bpq0aKFPv/880p97qdNm2EYviaxIkVFRbrnnns0fvz489778VToOnXqVKqWS1VcXKz+/furf//+WrNmjRo0aKDc3Fz179+/0lPIL/b9w8Ku/PpXu8YWAAAAQM3hdbvl/VGSWeXj6crGKioqUk5Oju68806TKvpBcHCwysrK/PZ17NhR+/bt069+9atKn0vSeef7sWbNmqlWrVratm2br0k+efKkDhw4oN69e0uSPvvsM33zzTeaP3++4uLiJEk7d+6sVC2Xol27dlq9erVKS0svO7V13h3mAAAAAGCRiRMnKisrS4cPH9YHH3ygW2+9VW63W8OGDTN1nISEBG3e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f6nFixerc+fOKioqUnh4eKV/DmvXrtXx48e1Y8cO1atXT5L0q1/9qtLn+SnTE9t58+apc+fOioiIUMOGDTVkyBDt37/f7GEAAAAA4LLl5eWpoKDAt02ZMuWCx9x3331as2aNr4m8XG3atPE1nJIUExPzs1N69+zZo7S0NIWHh/u2/v37y+Px6NChQ77jkpKSKl1PTk6Ozp49q65du/r21atXT9dcc43fcbt27dKgQYMUHx+viIgI9e7dW5KUm5tb6TElKTs7W4mJib6m1iymJ7ZZWVkaN26cOnfurHPnzunPf/6zbrzxRu3bt0916tQxezgAAAAATuY6K7ksnEj673Q4MjJSkZGRFz10165dys/PV8eOHX37ysrKtHnzZi1ZskQlJSV+zerF1KpVy++1YRg/O/22qKhI99xzj8aPH3/ee/Hx8b4/V1WfVVxcrP79+6t///5as2aNGjRooNzcXPXv3/+ii1RdTFhYmMlV/sD0v0GbNm3ye52WlqaGDRtq165duv76680eDgAAAACqxA033KBPPvnEb9/o0aPVsmVLTZ48+ZKb2ksRHByssrIyv30dO3bUvn37Kj1VNzg4WJLOO9+PNWvWTLVq1dK2bdt8TfLJkyd14MABXyr72Wef6ZtvvtH8+fN9U7d37txZqVp+ql27dnruuef07bffmpraVvniUQUFBZJketQMAAAAAFUpIiJC1157rd9Wp04d1a9fX9dee62pYyUkJGjz5s36+uuvdeLECUnS5MmT9cEHHyglJUXZ2dk6ePCgNm7ceN7iUT/VsGFDhYWFadOmTTp27JivJ/ux8PBwjRkzRpMmTdK7776rvXv3atSoUXK5/n+LGB8fr+DgYD399NP64osv9Oqrr2rWrFlX9D2HDRum6OhoDRkyRFu2bNEXX3yhv/3tb/rwww+v6LxV2th6PB6lpqaqR48eFV74kpKS81YkAwAAAFBDGBY/6sewcKGqSpg5c6YOHz6sZs2aqUGDBpJ+SDezsrJ04MAB9erVS4mJiZo2bZpiY2Mveq6goCAtXrxYy5cvV2xsrAYPHnzB45544gn16tVLgwYNUr9+/dSzZ0916tTJ936DBg2Ulpam//3f/1Xr1q01f/58LViw4Iq+Z3BwsN566y01bNhQN910k9q2bav58+dfcfpteL1e7xWd4SL+9Kc/6Y033tD7779/3upa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", - "text/plain": [ - "
    " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# ## Plot with labels\n", "# labels=['0 Dry',\n", @@ -1207,7 +1225,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 16, "id": "ad27ef63-3e62-4167-8369-0d6fa79bab8e", "metadata": { "tags": [] @@ -1226,7 +1244,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 35/35 [00:23<00:00, 1.50it/s]\n" + "100%|██████████| 35/35 [00:19<00:00, 1.78it/s]\n" ] }, { @@ -1244,7 +1262,8 @@ "\n", "exposure_filters, tide_cq_dict = exposure(\n", " dem=ds.elevation,\n", - " time_range=all_timerange,\n", + " start_date=start_date,\n", + " end_date=end_date,\n", " modelled_freq = modelled_freq,\n", " tide_model=tide_model,\n", " tide_model_dir=tide_model_dir,\n", @@ -1256,483 +1275,21 @@ " ds['exposure_'+str(x)]=exposure_filters[str(x)]" ] }, + { + "cell_type": "markdown", + "id": "89b86fb9", + "metadata": {}, + "source": [ + "### Spread and offset\n", + "Calculate the spread and high/low tide biases of input observed images as a percentage of the modelled tide heights.\n", + "\n", + "Warning: this code will only work if the exposure function has been run and produced 'unfiltered' exposure results.\n" + ] + }, { "cell_type": "code", - "execution_count": 30, - "id": "9e1ec86b-1130-4556-8a99-79245aa9f1c5", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/html": [ - "
    \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
    <xarray.Dataset>\n",
    -       "Dimensions:      (y: 12, x: 14, quantile: 1001)\n",
    -       "Coordinates:\n",
    -       "  * y            (y) float64 -1.779e+06 -1.779e+06 ... -1.782e+06 -1.782e+06\n",
    -       "  * x            (x) float64 -9.646e+05 -9.644e+05 ... -9.61e+05 -9.608e+05\n",
    -       "  * quantile     (quantile) float64 0.0 0.001 0.002 0.003 ... 0.998 0.999 1.0\n",
    -       "    spatial_ref  int32 3577\n",
    -       "Data variables:\n",
    -       "    unfiltered   (quantile, y, x) float32 -4.121 -4.118 -4.116 ... 3.676 3.677
    " - ], - "text/plain": [ - "\n", - "Dimensions: (y: 12, x: 14, quantile: 1001)\n", - "Coordinates:\n", - " * y (y) float64 -1.779e+06 -1.779e+06 ... -1.782e+06 -1.782e+06\n", - " * x (x) float64 -9.646e+05 -9.644e+05 ... -9.61e+05 -9.608e+05\n", - " * quantile (quantile) float64 0.0 0.001 0.002 0.003 ... 0.998 0.999 1.0\n", - " spatial_ref int32 3577\n", - "Data variables:\n", - " unfiltered (quantile, y, x) float32 -4.121 -4.118 -4.116 ... 3.676 3.677" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "tide_cq_dict" - ] - }, - { - "cell_type": "markdown", - "id": "89b86fb9", - "metadata": {}, - "source": [ - "### Spread and offset\n", - "Calculate the spread and high/low tide biases of input observed images as a percentage of the modelled tide heights.\n", - "\n", - "Warning: this code will only work if the exposure function has been run and produced 'unfiltered' exposure results.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "ccc3123d", + "execution_count": null, + "id": "ccc3123d", "metadata": { "tags": [] }, @@ -1761,7 +1318,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": null, "id": "eec0081d", "metadata": { "tags": [] @@ -1786,855 +1343,12 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": null, "id": "b80d35e1", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/html": [ - "
    \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
    <xarray.Dataset>\n",
    -       "Dimensions:                (y: 12, x: 14)\n",
    -       "Coordinates:\n",
    -       "  * y                      (y) float64 -1.779e+06 -1.779e+06 ... -1.782e+06\n",
    -       "  * x                      (x) float64 -9.646e+05 -9.644e+05 ... -9.608e+05\n",
    -       "    spatial_ref            int32 3577\n",
    -       "    band                   int64 1\n",
    -       "Data variables: (12/14)\n",
    -       "    elevation              (y, x) float64 nan nan nan nan ... nan nan nan nan\n",
    -       "    elevation_uncertainty  (y, x) float64 nan nan nan nan ... nan nan nan nan\n",
    -       "    extents                (y, x) float64 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 3.0\n",
    -       "    exposure_Hightide      (y, x) float64 nan nan nan nan ... nan nan nan nan\n",
    -       "    exposure_wet           (y, x) float64 nan nan nan nan ... nan nan nan nan\n",
    -       "    exposure_wet_Hightide  (y, x) float64 nan nan nan nan ... nan nan nan nan\n",
    -       "    ...                     ...\n",
    -       "    oa_hat                 (y, x) float32 nan nan nan nan ... nan nan nan 3.677\n",
    -       "    oa_lot                 (y, x) float32 nan nan nan nan ... nan nan nan -3.154\n",
    -       "    oa_hot                 (y, x) float32 nan nan nan nan ... nan nan nan 2.637\n",
    -       "    oa_spread              (y, x) float32 nan nan nan nan ... nan nan nan 75.52\n",
    -       "    oa_offset_lowtide      (y, x) float32 nan nan nan nan ... nan nan nan 10.92\n",
    -       "    oa_offset_hightide     (y, x) float32 nan nan nan nan ... nan nan nan 13.56
    " - ], - "text/plain": [ - "\n", - "Dimensions: (y: 12, x: 14)\n", - "Coordinates:\n", - " * y (y) float64 -1.779e+06 -1.779e+06 ... -1.782e+06\n", - " * x (x) float64 -9.646e+05 -9.644e+05 ... -9.608e+05\n", - " spatial_ref int32 3577\n", - " band int64 1\n", - "Data variables: (12/14)\n", - " elevation (y, x) float64 nan nan nan nan ... nan nan nan nan\n", - " elevation_uncertainty (y, x) float64 nan nan nan nan ... nan nan nan nan\n", - " extents (y, x) float64 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 3.0\n", - " exposure_Hightide (y, x) float64 nan nan nan nan ... nan nan nan nan\n", - " exposure_wet (y, x) float64 nan nan nan nan ... nan nan nan nan\n", - " exposure_wet_Hightide (y, x) float64 nan nan nan nan ... nan nan nan nan\n", - " ... ...\n", - " oa_hat (y, x) float32 nan nan nan nan ... nan nan nan 3.677\n", - " oa_lot (y, x) float32 nan nan nan nan ... nan nan nan -3.154\n", - " oa_hot (y, x) float32 nan nan nan nan ... nan nan nan 2.637\n", - " oa_spread (y, x) float32 nan nan nan nan ... nan nan nan 75.52\n", - " oa_offset_lowtide (y, x) float32 nan nan nan nan ... nan nan nan 10.92\n", - " oa_offset_hightide (y, x) float32 nan nan nan nan ... nan nan nan 13.56" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Inspect contents of ds before plotting\n", "ds" @@ -2642,31 +1356,12 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": null, "id": "0b8f96f8", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/env/lib/python3.10/site-packages/matplotlib/cm.py:478: RuntimeWarning: invalid value encountered in cast\n", - " xx = (xx * 255).astype(np.uint8)\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABjUAAAb+CAYAAAARrLJ+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3xUZfbH8e+dSSGUJCKEACKEohhEUUAECyooTYUVZUFc6oIlqCAWcEWaoFixsKKugrqwKhZ+uioIiO6qiBHFhrKANJWAinTS5j6/PyYzzKQxgbmZDPN57+tZMrc880wCzs2ce86xjDFGAAAAAAAAAAAAVZwr0gsAAAAAAAAAAAAIBUENAAAAAAAAAAAQFQhqAAAAAAAAAACAqEBQAwAAAAAAAAAARAWCGgAAAAAAAAAAICoQ1AAAAAAAAAAAAFGBoAYAAAAAAAAAAIgKBDUAAAAAAAAAAEBUIKgBAAAAAAAAAACiAkGNY5BlWZo0aVKkl1GuIUOGqEmTJhF7/s8++0wJCQnavHlzxNaAozdu3Dh16NAh0ssAgErF+zzK8sEHH8iyLH3wwQeRXkoJN9xwgy6++OJILyMi+vfvr379+kV6GQAAAMAxg6BGlJg7d64syypzfPrpp5FeYgm//PKLJk2apNWrV0d6KSX87W9/04ABA9S4ceNKf+41a9Zo0qRJ2rRpU6U/dyh27dqlatWqybIsff/996UeM2TIEFmWpeTkZB08eLDE/nXr1vn/bj744INB+zZt2qShQ4eqWbNmqlatmtLT03X++edr4sSJQcddcMEFOvXUU8td6+jRo/XVV1/pzTffrOCrBICqhfd5SNL06dO1cOHCiDy3kz/PjRs36h//+IfuvPPOsM8divnz52vmzJkReW5JuuOOO/Taa6/pq6++itgaAABHLxqv1wDgWBUX6QWgYqZMmaKMjIwS25s3bx6B1ZTvl19+0eTJk9WkSRO1adMmaN8zzzwj27Yjsq7Vq1dr6dKl+uSTTyLy/GvWrNHkyZN1wQUXVMm7WBcsWCDLspSenq558+bpnnvuKfW4uLg4HThwQG+99VaJuw/nzZunatWqKTc3N2j7+vXr1b59eyUlJWnYsGFq0qSJtm3bpi+++EIzZszQ5MmTK7TW9PR09e7dWw8++KAuv/zyir1QAKiCeJ+PbdOnT9eVV16pPn36HNH5559/vg4ePKiEhIQKn1vez/NoPfroo8rIyNCFF14Y1nlDNX/+fH377bcaPXp0RJ7/jDPOULt27fTQQw/phRdeiMgaAADhE03XawBwrCKoEWV69Oihdu3aRXoZRy0+Pj5izz1nzhydeOKJOvvssyO2hlAZY5Sbm6ukpKRKe85//vOf6tmzpxo3bqz58+eXGdRITEzUOeeco3/9618lghrz589Xr1699NprrwVtf+SRR7Rv3z6tXr26RJbMjh07jmi9/fr101VXXaUff/xRTZs2PaI5AKCq4H0+9oTzvd7lcqlatWphWFX4FBQUaN68ebruuusivZSQ5ObmKiEhQS5XeBPa+/Xrp4kTJ+rvf/+7atasGda5AQCV61i5Xquo/fv3q0aNGpFeBgBIovxUzPj55581bNgw1atXT4mJiWrVqpWee+45//7t27crLi6u1Dvl165dK8uy9MQTT0iSdu7cqVtvvVWtW7dWzZo1lZycrB49egSl1H/wwQdq3769JGno0KH+dMy5c+dKKr3W9v79+zV27Fg1atRIiYmJOvnkk/Xggw/KGBN0nGVZGjVqlBYuXKhTTz3V/3oWLVoU0vdi4cKFuuiii2RZVtD2Jk2a6NJLL9UHH3ygdu3aKSkpSa1bt/bXpX799dfVunVrVatWTW3bttWXX35ZYu4ffvhBV155pWrXrq1q1aqpXbt2QaWR5s6dq6uuukqSdOGFF/q/L77n8K1h8eLF/jU89dRTkrxloUaPHu3//jRv3lwzZswocSfsSy+9pLZt26pWrVpKTk5W69at9eijj4b0vdmyZYv++9//qn///urfv782btxYbkbL1VdfrXfffVe7du3yb8vOzta6det09dVXlzh+w4YNOuGEE0ot+5WWlhbSGovr2rWrJOn//u//juh8ADgW8D7v5SsLUbzEY2m9JnxlDtesWaMLL7xQ1atXV8OGDXX//feXmDc3N1eTJk3SSSedpGrVqql+/fq64oortGHDBv8xtm1r5syZatWqlapVq6Z69erp2muv1R9//BE0V1nv9ZZlaf/+/Xr++ef9388hQ4ZIkjZv3qwbbrhBJ598spKSknT88cfrqquuCtvrLO/nOXHiRMXHx+vXX38t8X0ZOXKkUlNTS2RmBvroo4/022+/+d+vi6/1lVde0eTJk9WwYUPVqlVLV155pXbv3q28vDyNHj1aaWlpqlmzpoYOHaq8vLwS8//zn/9U27ZtlZSUpNq1a6t///7aunVr0Ot/++23tXnzZv/r8v3d9K3hpZde0l133aWGDRuqevXq2rNnjyRp5cqV6t69u1JSUlS9enV17txZH3/8cdDz7927V6NHj1aTJk2UmJiotLQ0XXzxxfriiy+Cjrv44ou1f/9+LVmypMzvFQAg+k2cOFEul0vLli0L2j5y5EglJCT4r6d870Evv/yy7rzzTqWnp6tGjRq6/PLLg97HfBYsWOB/v6tTp46uueYa/fzzz0HH5OTkaOjQoTrhhBOUmJio+vXrq3fv3kHXC2X1ZmvSpIn/ukM6dE314Ycf6oYbblBaWppOOOEE//53331X5513nmrUqKFatWqpV69e+u67747gOwYAR4ZMjSize/du/fbbb0HbLMvS8ccfX+Y527dv19lnn+3/kKBu3bp69913NXz4cO3Zs0ejR49WvXr11LlzZ73yyislehu8/PLLcrvd/g/jf/zxRy1cuFBXXXWVMjIytH37dj311FPq3Lmz1qxZowYNGuiUU07RlClTdPfdd2vkyJE677zzJEmdOnUqdY3GGF1++eVavny5hg8frjZt2mjx4sW67bbb9PPPP+uRRx4JOv6jjz7S66+/rhtuuEG1atXSY489pr59+2rLli3lfi9+/vlnbdmyRWeeeWap+9evX6+rr75a1157ra655ho9+OCDuuyyyzR79mzdeeeduuGGGyRJ9957r/r166e1a9f67+T77rvvdM4556hhw4YaN26catSooVdeeUV9+vTRa6+9pj/96U86//zzddNNN+mxxx7TnXfeqVNOOUWS/H9K3g+XBgwYoGuvvVYjRozQySefrAMHDqhz5876+eefde211+rEE0/UJ598ovHjx2vbtm3+OtFLlizRgAED1KVLF82YMUOS9P333+vjjz/WzTffXOb3xedf//qXatSooUsvvVRJSUlq1qyZ5s2bV+bP7YorrtB1112n119/XcOGDZPkzdJo2bJlqd/jxo0ba+nSpXr//fd10UUXHXY9oUhJSVGzZs308ccfa8yYMWGZEwAihfd5ryN9n6+oP/74Q927d9cVV1yhfv366dVXX9Udd9yh1q1bq0ePHpIkj8ejSy+9VMuWLVP//v118803a+/evVqyZIm+/fZbNWvWTJJ07bXXau7cuRo6dKhuuukmbdy4UU888YS+/PJLffzxx0HZK6W917/44ov661//qrPOOksjR46UJP/c2dnZ+uSTT9S/f3+dcMIJ2rRpk5588kldcMEFWrNmjapXr35Ur7O8n+e5556rKVOm6OWXX9aoUaP8c+bn5+vVV19V3759y80O+eSTT2RZls4444xS9997771KSkrSuHHjtH79ej3++OOKj4+Xy+XSH3/8oUmTJunTTz/V3LlzlZGRobvvvtt/7rRp0zRhwgT169dPf/3rX/Xrr7/q8ccf1/nnn68vv/xSqamp+tvf/qbdu3frp59+8v89K54pMXXqVCUkJOjWW29VXl6eEhIS9P7776tHjx5q27at/wOqOXPm6KKLLtJ///tfnXXWWZKk6667Tq+++qpGjRqlzMxM/f777/roo4/0/fffB10LZWZmKikpSR9//LH+9Kc/lfvzAgBUbeVdr91111166623NHz4cH3zzTeqVauWFi9erGeeeUZTp07V6aefHnTetGnTZFmW7rjjDu3YsUMzZ85U165dtXr1an8Wp+/6on379rr33nu1fft2Pfroo/r444/973eS1LdvX3333Xe68cYb1aRJE+3YsUNLlizRli1bjrj09Q033KC6devq7rvv1v79+yVJL774ogYPHqxu3bppxowZOnDggJ588kmde+65+vLLL6tkmW0AxyCDqDBnzhwjqdSRmJgYdKwkM3HiRP/j4cOHm/r165vffvst6Lj+/fublJQUc+DAAWOMMU899ZSRZL755pug4zIzM81FF13kf5ybm2s8Hk/QMRs3bjSJiYlmypQp/m3Z2dlGkpkzZ06J1zN48GDTuHFj/+OFCxcaSeaee+4JOu7KK680lmWZ9evXB72+hISEoG1fffWVkWQef/zxEs8VaOnSpUaSeeutt0rsa9y4sZFkPvnkE/+2xYsXG0kmKSnJbN682b/d971avny5f1uXLl1M69atTW5urn+bbdumU6dOpkWLFv5tCxYsKHFu8TUsWrQoaPvUqVNNjRo1zP/+97+g7ePGjTNut9ts2bLFGGPMzTffbJKTk01hYWG534eytG7d2gwcOND/+M477zR16tQxBQUFQccNHjzY1KhRwxjj/Rl16dLFGGOMx+Mx6enpZvLkyWbjxo1GknnggQf853377bcmKSnJSDJt2rQxN998s1m4cKHZv39/ibV07tzZtGrVKqR1X3LJJeaUU06p8OsFgKqC9/nwvM/7vo8bN24M2r58+fIS772dO3c2kswLL7zg35aXl2fS09NN3759/duee+45I8k8/PDDJZ7Ptm1jjDH//e9/jSQzb968oP2LFi0qsb2s93pjjKlRo4YZPHhwie2+n2GgFStWlFj/0bzO8n6eHTt2NB06dAja9vrrr5d5PRPommuuMccff3yJ7b61nnrqqSY/P9+/fcCAAcayLNOjR48Sawj8O7Vp0ybjdrvNtGnTgo775ptvTFxcXND2Xr16BZ1bfA1NmzYN+h7btm1atGhhunXr5v8ZG+P9OWRkZJiLL77Yvy0lJcVkZWWV+z3wOemkk0q8LgBA9Aj1eu2bb74xCQkJ5q9//av5448/TMOGDU27du2Cfq/2vQc1bNjQ7Nmzx7/9lVdeMZLMo48+aowxJj8/36SlpZlTTz3VHDx40H/cv//9byPJ3H333cYYY/74448Sv3+Xpvh1pE/jxo2DrkF8r/Xcc88N+nxh7969JjU11YwYMSLo/JycHJOSklJiOwA4hfJTUWbWrFlasmRJ0Hj33XfLPN4Yo9dee02XXXaZjDH67bff/KNbt27avXu3Pz3+iiuuUFxcnF5++WX/+d9++63WrFmjP//5z/5tiYmJ/uwEj8ej33//XTVr1tTJJ59cItU+VO+8847cbrduuummoO1jx46VMabEa+zatav/7kVJOu2005ScnKwff/yx3Of5/fffJUnHHXdcqfszMzPVsWNH/+MOHTpIki666CKdeOKJJbb7nm/nzp16//331a9fP+3du9f/Pf7999/VrVs3rVu3rkRqaFkyMjLUrVu3oG0LFizQeeedp+OOOy7oZ9i1a1d5PB795z//kSSlpqYecWmDr7/+Wt98840GDBjg3zZgwAD99ttvWrx4cZnnXX311frggw+Uk5Oj999/Xzk5OaWWnpKkVq1aafXq1brmmmu0adMmPfroo+rTp4/q1aunZ555psJr9vF9XwAg2vE+73Wk7/MVVbNmTV1zzTX+xwkJCTrrrLOCnue1115TnTp1dOONN5Y431fKcsGCBUpJSdHFF18c9DNo27atatasqeXLlwedV9p7fXkC+20UFBTo999/V/PmzZWamhrSzySU11meQYMGaeXKlUHltubNm6dGjRqpc+fO5Z77+++/l3nd5Zs7MIulQ4cOMsb4M0ADt2/dulWFhYWSvGVBbdtWv379gr7n6enpatGiRYnveXkGDx4c9D1evXq1v5Tm77//7p97//796tKli/7zn//4y3+mpqZq5cqV+uWXXw77PFyvAMCx4XDXa6eeeqomT56sf/zjH+rWrZt+++03Pf/884qLK1ksZdCgQapVq5b/8ZVXXqn69evrnXfekSR9/vnn2rFjh2644YagzMhevXqpZcuWevvttyV5rxUSEhL0wQcflCh9eTRGjBght9vtf7xkyRLt2rXL/1mBb7jdbnXo0KFC778AcDQoPxVlzjrrrAo1pPr111+1a9cuPf3003r66adLPcbXoLlOnTrq0qWLXnnlFU2dOlWStyRFXFycrrjiCv/xtm3r0Ucf1d///ndt3LhRHo/Hv+9IS0Js3rxZDRo0CHozlw6VZdq8eXPQ9sAAg89xxx0X8pu3KVa/u6x5U1JSJEmNGjUqdbvv+davXy9jjCZMmKAJEyaUOveOHTvUsGHDw64tIyOjxLZ169bp66+/Vt26dcucW/Kmhr7yyivq0aOHGjZsqEsuuUT9+vVT9+7dD/u8//znP1WjRg01bdpU69evlyRVq1ZNTZo00bx589SrV69Sz+vZs6dq1aqll19+WatXr1b79u3VvHnzEnW+fU466SS9+OKL8ng8WrNmjf7973/r/vvv18iRI5WRkVGi5nYojDEleqQAQDTifd7raN/nQ3XCCSeUeP847rjj9PXXX/sfb9iwQSeffHKpH0T4rFu3Trt37y6zP5TvZ+BT2nt9eQ4ePKh7771Xc+bM0c8//xx0HbN79+7Dnh/K6yzPn//8Z40ePVrz5s3T3Xffrd27d+vf//63xowZE9L7b1nXXVLFrr1s29bu3bt1/PHHa926dTLGqEWLFqXOW5Fm9cV/HuvWrZPkDXaUZffu3TruuON0//33a/DgwWrUqJHatm2rnj17atCgQWratGmJc7heAYBjQyjXa7fddpteeuklffbZZ5o+fboyMzNLPa74+5hlWUG/T/uukU4++eQS57Zs2VIfffSRJO9NKTNmzNDYsWNVr149nX322br00ks1aNAgpaenV/Ql+pX1HllWOenk5OQjfi4AqAiCGsc4311k11xzTZm/mJ122mn+r/v376+hQ4dq9erVatOmjV555RV16dJFderU8R8zffp0TZgwQcOGDdPUqVNVu3ZtuVwujR49ukTTaqcE3ikQqLxfmqVDH8aU9aFIWfMe7vl8r/vWW28t887L5s2bl7s2n8A7BX1s29bFF1+s22+/vdRzTjrpJEneZturV6/W4sWL9e677+rdd9/VnDlzNGjQID3//PNlPqcxRv/617+0f//+Ui+2duzYoX379pWoQS15L56uuOIKPf/88/rxxx9LbTpWGrfbrdatW6t169bq2LGjLrzwQs2bN++Ighp//PFH0N9RAIgVvM8HK+sD48DATDiepzjbtpWWlqZ58+aVur/4TQmlvdeX58Ybb9ScOXM0evRodezYUSkpKbIsS/379w/pZ3K0r/O4447TpZde6g9qvPrqq8rLywvK/ijL8ccfX24w6miuvSzL0rvvvlvqsaVds5Sl+M/D9z194IEH1KZNm1LP8c3fr18/nXfeeXrjjTf03nvv6YEHHtCMGTP0+uuv+/uy+Pzxxx9lBmEAAMeWH3/80R8A+OabbyrlOUePHq3LLrtMCxcu1OLFizVhwgTde++9ev/998vsbeVT1rVSWe+RL774YqnBkvJuAgGAcOK/Nse4unXrqlatWvJ4PCF9WNynTx9de+21/tIU//vf/zR+/PigY1599VVdeOGFevbZZ4O279q1K+hDkYrcieZrIL13796guzh/+OEH//5waNmypSRp48aNYZnPx3c3Xnx8/GG/z0dyh16zZs20b9++kH6GCQkJuuyyy3TZZZfJtm3dcMMNeuqppzRhwoQyAysffvihfvrpJ02ZMiWoabnk/QV85MiRWrhwYZkfXlx99dV67rnn5HK51L9//wq/Pt9dLtu2bavwuZL351m84RoAxALe54P5yhzt2rUraHvxTJCKaNasmVauXKmCgoIy7/5v1qyZli5dqnPOOafCAYtAZX1PX331VQ0ePFgPPfSQf1tubm6J13k0DvfzHDRokHr37q3s7GzNmzdPZ5xxhlq1anXYeVu2bKl58+Zp9+7d/iyMcGjWrJmMMcrIyPDf3FGWil57+UqfJScnh/Tvqn79+rrhhht0ww03aMeOHTrzzDM1bdq0oKBGYWGhtm7dqssvv7xCawEARB/btjVkyBAlJydr9OjRmj59uq688sqgzFgfX+DDxxij9evX+29K8V0jrV27tkR2xNq1a0tcQzVr1kxjx47V2LFjtW7dOrVp00YPPfSQ/vnPf0ryXisVv37Iz88P+Xdx33tkWlraEd2QCADhQk+NY5zb7Vbfvn312muv6dtvvy2x/9dffw16nJqaqm7duumVV17RSy+9pISEBPXp06fEnMXv7FuwYEGJnhE1atSQVPKDhdL07NlTHo9HTzzxRND2Rx55RJZllbjT7Ug1bNhQjRo10ueffx6W+XzS0tJ0wQUX6Kmnnir1YiDw+1yR74tPv379tGLFilJ7W+zatctfX9rXM8TH5XL5L4by8vLKnN9Xeuq2227TlVdeGTRGjBihFi1alHn3qSRdeOGFmjp1qp544olyU1v/+9//qqCgoMR2X73Q0lJqD2f37t3asGGDOnXqVOFzASDa8T4fzPeLtq/XlOS987Cs0lyh6Nu3r3777bcSa5cOZQ3069dPHo/HX9YrUGFhYcjv+TVq1Cj12NJ+Jo8//niZd1UeicP9PHv06KE6depoxowZ+vDDD0PK0pCkjh07yhijVatWhWupkrw9YtxutyZPnlzie2OMCbomqlGjRkhlunzatm2rZs2a6cEHH9S+fftK7Pf9u/J4PCXmTUtLU4MGDUpcd61Zs0a5ublcrwBADHj44Yf1ySef6Omnn9bUqVPVqVMnXX/99aX2VXrhhRe0d+9e/+NXX31V27Zt818btWvXTmlpaZo9e3bQe8u7776r77//3l8m+sCBA8rNzQ2au1mzZqpVq1bQec2aNQu6TpKkp59+OuRrim7duik5OVnTp08v9Xf74teeAOAUMjWizLvvvuu/qzFQp06dSq3dK0n33Xefli9frg4dOmjEiBHKzMzUzp079cUXX2jp0qXauXNn0PF//vOfdc011+jvf/+7unXrptTU1KD9l156qaZMmaKhQ4eqU6dO+uabbzRv3rwSz9+sWTOlpqZq9uzZqlWrlmrUqKEOHTqUWkf6sssu04UXXqi//e1v2rRpk04//XS99957+r//+z+NHj06qFno0erdu7feeOONsNc1njVrls4991y1bt1aI0aMUNOmTbV9+3atWLFCP/30k7766itJUps2beR2uzVjxgzt3r1biYmJuuiii8qswy1563G++eabuvTSSzVkyBC1bdtW+/fv1zfffKNXX31VmzZtUp06dfTXv/5VO3fu1EUXXaQTTjhBmzdv1uOPP642bdqUyMDwycvL02uvvaaLL744qPFYoMsvv1yPPvqoduzYUeo6XS6X7rrrrsN+j2bMmKFVq1bpiiuu8AdbvvjiC73wwguqXbu2Ro8eHXT8r7/+qnvuuafEPBkZGRo4cKAkaenSpTLGqHfv3od9fgCo6nifPzqtWrXS2WefrfHjx2vnzp2qXbu2XnrpJX/w/0gMGjRIL7zwgm655RZ99tlnOu+887R//34tXbpUN9xwg3r37q3OnTvr2muv1b333qvVq1frkksuUXx8vNatW6cFCxbo0Ucf1ZVXXnnY52rbtq2WLl2qhx9+WA0aNFBGRoY6dOigSy+9VC+++KJSUlKUmZmpFStWaOnSpUfc46Q0h/t5xsfHq3///nriiSfkdrs1YMCAkOY999xzdfzxx2vp0qVl1t8+0vXec889Gj9+vDZt2qQ+ffqoVq1a2rhxo9544w2NHDlSt956qyTv9/Xll1/WLbfcovbt26tmzZq67LLLypzb5XLpH//4h3r06KFWrVpp6NChatiwoX7++WctX75cycnJeuutt7R3716dcMIJuvLKK3X66aerZs2aWrp0qbKzs4OyaiRvY9Xq1avr4osvDtv3AAAQGeVdr+Xl5WnChAkaMmSI/71m7ty5atOmjb8HZqDatWvr3HPP1dChQ7V9+3bNnDlTzZs314gRIyR5339nzJihoUOHqnPnzhowYIC2b9+uRx99VE2aNNGYMWMkebNvu3Tpon79+ikzM1NxcXF64403tH379qBqCn/961913XXXqW/fvrr44ov11VdfafHixSGXc05OTtaTTz6pv/zlLzrzzDPVv39/1a1bV1u2bNHbb7+tc845p9QbQQAg7Ayiwpw5c4ykMsecOXP8x0oyEydODDp/+/btJisryzRq1MjEx8eb9PR006VLF/P000+XeK49e/aYpKQkI8n885//LLE/NzfXjB071tSvX98kJSWZc845x6xYscJ07tzZdO7cOejY//u//zOZmZkmLi4uaJ2DBw82jRs3Djp27969ZsyYMaZBgwYmPj7etGjRwjzwwAPGtu2g4ySZrKysEutq3LixGTx4cJnfQ58vvvjCSDL//e9/S5zfq1evEseX9nwbN240kswDDzwQtH3Dhg1m0KBBJj093cTHx5uGDRuaSy+91Lz66qtBxz3zzDOmadOmxu12G0lm+fLl5a7BGO/3Z/z48aZ58+YmISHB1KlTx3Tq1Mk8+OCDJj8/3xhjzKuvvmouueQSk5aW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RnlBjWbNmunDDz/Uvn37tHXrVn322WcqKChQ06ZNlZ6eLknavn170Dnbt2/374tmBDUAAAAAAKhETz75pE477TT/BxYdO3bUu+++W+45CxYsUMuWLVWtWjW1bt1a77zzTiWtFgAAVGU1atRQ/fr19ccff2jx4sXq3bu3MjIylJ6ermXLlvmP27Nnj1auXKmOHTtGcLXhQVADABBVPLIcGwAAIAb4emqEe1TACSecoPvuu0+rVq3S559/rosuuki9e/fWd999V+rxn3zyiQYMGKDhw4fryy+/VJ8+fdSnTx99++234fiOAACAKLR48WItWrRIGzdu1JIlS3ThhReqZcuWGjp0qCzL0ujRo3XPPffozTff1DfffKNBgwapQYMG6tOnT6SXftToqQEAiCrONQqnbAQAADHBNg40Cq/YdcRll10W9HjatGl68skn9emnn6pVq1Yljn/00UfVvXt33XbbbZKkqVOnasmSJXriiSc0e/bsI183AACokLgEl1wJ4f9MwvZ452zfvr3cbreysrKUlZVV7jm7d+/W+PHj9dNPP6l27drq27evpk2bpvj4eEnS7bffrv3792vkyJHatWuXzj33XC1atEjVqlUL+/orG0ENAAAAAAAixOPxaMGCBdq/f3+Z5SBWrFihW265JWhbt27dtHDhwkpYIQAAqCzZ2dlBjcLL069fP/Xr16/M/ZZlacqUKZoyZUq4lldlENQAAEQVb6Pw8JeKolE4AAAxwhjvCPec8taqDpSYmFhmg89vvvlGHTt2VG5urmrWrKk33nhDmZmZpR6bk5OjevXqBW2rV6+ecnJywrB4AACA6EJPDQAAAAAAwqBRo0ZKSUnxj3vvvbfMY08++WStXr1aK1eu1PXXX6/BgwdrzZo1lbhaAACA6ESmBgAgqthyyeNATN4WPTUAAIgJR9DYO6Q5JW3dujWoZERZWRqSlJCQoObNm0uS2rZtq+zsbD366KN66qmnShybnp6u7du3B23bvn270tPTw7F6AACAqEKmBgAAAAAAYZCcnBw0ygtqFGfbtvLy8krd17FjRy1btixo25IlS8rswQEAAJyR4HY5NiRvo/DMzEzNmjUrwq+0aiNTAwAQVTzGJY8Jf0zeE+7a2gAAoGoyRrKd6akRqvHjx6tHjx468cQTtXfvXs2fP18ffPCBFi9eLEkaNGiQGjZs6C9f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xMTEck+1bVujR4/WOeeco1NPPbXM404++WQ999xzOu2007R79249+OCD6tSpk7777judcMIJR/8aAABAxNEoPDRkagAAUMVs3LhROTk56tq1q39bSkqKOnTooBUrVkiSVqxYodTUVH9AQ5K6du0ql8ullStXVvqaAQCA1KhRI6WkpPjHvffee9hzsrKy9O233+qll14q97iOHTtq0KBBatOmjTp37qzXX39ddevW1VNPPRWu5QMAAEQFMjUAAFHFliVbDmRqFM15JHdYhltOTo4klaiTXa9ePf++nJwcpaWlBe2Pi4tT7dq1/ccAAIBS2EUj3HNK2rp1a9DdlYe7hhg1apS/hGRFsy3i4+N1xhlnaP369RVeLgAAQDQjUwMAgACh3mE5btw4WZZV7vjhhx8qefUAACCSkpOTg0ZZQQ1jjEaNGqU33nhD77//vjIyMir8XB6PR998843q169/tMsGAAAhSnRbqubASHR7b7Skp0ZoyNQAAEQVp3tqhHqH5dixYzVkyJBy52zatOkRrSU9PV2StH379qAPKrZv3642bdr4j9mxY0fQeYWFhdq5c6f/fAAAUJKxjUyYe2pUdL6srCzNnz9f//d//6datWr5syxTUlKUlJQkSRo0aJAaNmzov8FiypQpOvvss9W8eXPt2rVLDzzwgDZv3qy//vWvYX0tAAAgcuipERqCGgAABPDdWXk4devWVd26dR1ZQ0ZGhtLT07Vs2TJ/EGPPnj1auXKlrr/+ekneutq7du3SqlWr1LZtW0nS+++/L9u21aFDB0fWBQAAwuPJJ5+UJF1wwQVB2+fMmeO/aWLLli1yuQ4VV/jjjz80YsQI5eTk6LjjjlPbtm31ySefKDMzs7KWDQAAUCUQ1AAARBWnMzWcsGXLFu3cuVNbtmyRx+PR6tWrJUnNmzdXzZo1JUktW7bUvffeqz/96U+yLEujR4/WPffcoxYtWigjI0MTJkxQgwYN1KdPH0nSKaecou7du2vEiBGaPXu2CgoKNGrUKPXv318NGjRw7LUAABD1HOypESpjDp/Z8cEHHwQ9fuSRR/TII49U7IkAAACOQQQ1AABw2N13363nn3/e//iMM86QJC1fvtx/h+batWu1e/du/zG333679u/fr5EjR2rXrl0699xztWjRIlWrVs1/zLx58zRq1Ch16dJFLpdLffv21WOPPVY5LwoAAAAAACACCGoAAKJKNGZqzJ07V3Pnzi33mOJ3bFqWpSlTpmjKlCllnlO7dm3Nnz8/HEsEACB2mKIR7jkBAMAxLzGgqXc42QGNwt1ut7KyspSVlRX25zlWuA5/CAAAVYcvqOHEAAAAxz5fo/BwDwAAgKOVnZ2tNWvWHDag0aRJE1mWVWL4zsvNzVVWVpaOP/541axZU3379tX27dsr4yVUCoIaAAAAAAAAAABEiezsbG3bts0/lixZIkm66qqrJEljxozRW2+9pQULFujDDz/UL7/8oiuuuCKSSw4ryk8BAKKKkWQr/FkV3F8JAECMqAKNwgEAAI5G3bp1gx7fd999atasmTp37qzdu3fr2Wef1fz583XRRRdJkubMmaNTTjlFn376qc4+++xILDmsyNQAAAAAAAAAACDC9uzZEzTy8vIOe05+fr7++c9/atiwYbIsS6tWrVJBQYG6du3qP6Zly5Y68cQTtWLFCieXX2nI1AAARJVobBQOAACqDmN7R7jnBAAAx754l6V4V/g/PygsmrNRo0ZB2ydOnKhJkyaVe+7ChQu1a9cuDRkyRJKUk5OjhIQEpaamBh1Xr1495eTkhGvJEUVQAwAAAAAAAACACNu6dauSk5P9jxMTEw97zrPPPqsePXqoQYMGTi6tSiGoAQCIKmRqAACAo0JPDQAAUEUlJycHBTUOZ/PmzVq6dKlef/11/7b09HTl5+dr165dQdka27dvV3p6ejiXGzH01AAAAAAAAAAAIMrMmTNHaWlp6tWrl39b27ZtFR8fr2XLlvm3rV27Vlu2bFHHjh0jscywI1MDABBVyNQAAABHg54aAADgWGDbtubMmaPBgwcrLu7Qx/wpKSkaPny4brnlFtWuXVvJycm68cYb1bFjR5199tkRXHH4ENQAAAAAAAAAAOAwEtwuJbrDX/zIUzRn+/bt5Xa7lZWVpaysrHLPWbp0qbZs2aJhw4aV2PfII4/I5XKpb9++ysvLU7du3fT3v/897OuOFIIaAICoQqYGAAA4Kkbh74FhwjwfAACISdnZ2SH31LjkkktkTOkXIdWqVdOsWbM0a9ascC6vyiCoAQCIKsZYMg4EIJyYEwAAVD3GeEe45wQAAEDloFE4AAAAAAAAAACICmRqAACiii1LthwoP+XAnAAAoOqhUTgAAEB0I1MDAAAAAAAAAIDDiLNcinO5wz+sQ43CMzMzj9leGOFCpgYAIKrQKBwAABwVW+FvFE6mBgAACIOKNAqPZWRqAAAAAAAAAACAqECmBgAgqhhjyTiQVeHEnAAAoOqhpwYAAEB0I6gBAAAAAAAAAMBhJLjdSnC7wz5vYdGc7du3l9vtVlZWlrKyssL+PMcKghoAgKhCTw0AAHA0jPGOcM8JAABwtOipERp6agAAAAAAAAAAgKhApgYAIKrQUwMAABwV2/KOcM8JAACASkGmBgAAAAAAAAAAiApkagAAoopxqKcGmRoAAMQGY3tHuOcEgGOd2f50pT5f7hP/V6nPlzT17Up9vljgOufBynuuPXskPeH488S74pTgCv9H6gUujyQahYeKoAYAIKoYOdOMk/6eAADEBidKWXJzBAAACAcahYeG8lMAAAAAAAAAACAqkKkBAIgqtixZCv/dkLYDcwIAgKqH8lMAAADRjUwNAAAAAAAAAAAQFcjUAABEFSfqYPvmBQAAxz5jHMjUoDkXAAAxIc7lVpzL7ci8Eo3CQ0VQAwAAAACAGDB48GANHz5c559/fqSXAgAASkGj8NBQfgoAEFVsYzk2AADAsc+X9RnuEQ12796trl27qkWLFpo+fbp+/vnnSC8JAACgwghqAAAAAAAQAxYuXKiff/5Z119/vV5++WU1adJEPXr00KuvvqqCgoJILw8AACAkBDUAAFHFGOcGAACIAbYlE+YhOzoyNSSpbt26uuWWW/TVV19p5cqVat68uf7yl7+oQYMGGjNmjNatWxfpJQIAAJSLoAYAAAAAADFm27ZtWrJkiZYsWSK3262ePXvqm2++UWZmph555JFILw8AgCopwR3n2JC8jcIzMzM1a9asCL/Sqo1G4QCAqOJU3epoqYUNAACOjhMZmtGS8VlQUKA333xTc+bM0XvvvafTTjtNo0eP1tVXX+1vSvrGG29o2LBhGjNmTIRXCwBA7KFReGgIagAAAAAAEAPq168v27Y1YMAAffbZZ2rTpk2JYy688EKlpqZW+toAAABCRVADABBVyNQAAABHw4lriWi5jnjkkUd01VVXqVq1amUek5qaqo0bN1biqgAAACqGnhoAgKhiG8uxAQAAjn3hbhLubxYeBZYvX66CgoIS2/fv369hw4ZFYEUAAAAVR1ADAAAAAIAY8Pzzz+vgwYMlth88eFAvvPBCBFYEAEB0iXe5leCKC/uId7kl0Sg8VJSfAgBEFSeae/rmBQAAx75YbBS+Z88eGWNkjNHevXuDyk95PB698847SktLi+AKAQCARKPwUBHUAAAAAADgGJaamirLsmRZlk466aQS+y3L0uTJkyOwMgAAgIojqAEAiCreuyudaBQe9ikBAEAVFIuNwpcvXy5jjC666CK99tprql27tn9fQkKCGjdurAYNGkRwhQAAAKEjqAEAgMOmTZumt99+W6tXr1ZCQoJ27dpV7vEFBQW666679M477+jHH39USkqKunbtqvvuuy/oA4cmTZpo8+bNQefee++9GjdunBMvAwAARKnOnTtLkjZu3KhGjRrJ5aK9JgAARyLO5VKcA++jvjnbt28vt9utrKwsZWVlhf15jhUENYAYcHBbE+2183XAGO23Xdpr4rXXrqb9dqIO2InaYyfpgJ2gfZ5qOuBJ0AE7QfsLE3XQE69cT5wOFCYozxOn3MI45RfGKa/QrcJCtwoLXfIUumUKXTIFLsljySq0tOmGWyP9knEMc+LuSt+8TsnPz9dVV12ljh076tlnnz3s8QcOHNAXX3yhCRMm6PTTT9cff/yhm2++WZdffrk+//zzoGOnTJmiESNG+B/XqlUr7OsHgC/eu0vWnj2ydu+Rdu+T9uyT+WO/zO5c2bsLVLjbo4LdlvL2xenAgQTty03Uvvx47S2I197COO0tcGtvoUt7Cy3tLZD2FUp7823tK7C111Ogveag9li7tdf6XQc8vyu9yb5Iv2Qcw2zbkm2H930/3PM5pXHjxtq1a5c+++wz7dixQ7ZtB+0fNGhQhFYGAAAkemqEiqAGEAM8AXV1bAX/wuVRxaPLgTNYlmQkyTLF9gDw8dWonjt3bkjHp6SkaMmSJUHbnnjiCZ111lnasmWLTjzxRP/2WrVqKT09PWxrBYDSWAcPSgcPSgdzpbx8KbdAyi2UyfXIzrVl8iVPoaXCQpcKPW4V2i55jEseYxUNBQ/byGMkW97GxbaMbMuWkX34xQA4Ym+99ZYGDhyoffv2KTk5WZZ16PrdsiyCGgAAICqQcwrECFveDxGCt4X2nwCXVbLZgBW4LejrI1gcUAHGwSFJe/bsCRp5eXmV9MrKt3v3blmWpdTU1KDt9913n44//nidccYZeuCBB1RYWBiZBQI4tu0/IGv/AelgnrQ/V+ZgvszBQpk8W3aeUeFBS548twoK4lTgcanA41Kex6UC26UC21KhsVRYLLBhZOTxBTQCghkENuA0b3+u8I9oMHbsWA0bNkz79u3Trl279Mcff/jHzp07I708AACAkJCpAcQAu9iHA7Y5snhm8XiFZRXbSbYGjgGNGjUKejxx4kRNmjQpMospkpubqzvuuEMDBgwISkO96aabdOaZZ6p27dr65JNPNH78eG3btk0PP/xwBFcL4FhkHTwo5eZLB/JkcgtkDhT4szTsXG+WRkGBS4Ue7yiwvVkaBUGZGocyNuyiYYqyNWyRpQFUhp9//lk33XSTqlevHumlAAAAHDEyNYAYYkvyFAUdPMUCG8UDHS7LLvbYe/uZZZngzA3LBMUxTClZHUA4+XpqODEkaevWrdq9e7d/jB8/vtR1jBs3TpZllTt++OGHo369BQUF6tevn4wxevLJJ4P23XLLLbrgggt02mmn6brrrtNDDz2kxx9/vMpklwA4huw/KO3PLcrUyJM5WCj7oEf2QSNP3qEsjfxCt/KLyk/5sjQKbBUFN6RC2xvM8JiA8lNFuXK2PDKGwAac5+R1RFXXrVu3Ev25AABA6BJccY4NydsoPDMzU7NmzTrsWn7++Wddc801Ov7445WUlKTWrVsHvc8bY3T33Xerfv36SkpKUteuXbVu3TrHvjeViUwNIAZ4iso7lMU+gl/CrBJpGwEDcFJgrahwzyspOTk5pKZcY8eO1ZAhQ8o9pmnTpke1JF9AY/PmzXr//fcPu64OHTqosLBQmzZt0sknn3xUzw0AQQ56AxrmYL5Mnq+XhpEnT/Lku0pkaRQYlz9Lo7BETw1TlKVhZBeVnzIWwQxUHieCENES1OjVq5duu+02rVmzRq1bt1Z8fHzQ/ssvvzxCKwMAAFLojcL/+OMPnXPOObrwwgv17rvvqm7dulq3bp2OO+44/zH333+/HnvsMT3//PPKyMjQhAkT1K1bN61Zs0bVqlVz8mU4jqAGEGNsY/mzNSRvKYgjZVnGG8ewjCOfMQNVWd26dVW3bl3H5vcFNNatW6fly5fr+OOPP+w5q1evlsvlUlpammPrAhCj9ufK7M+V2Z8vc6BQpihLo/CgS4X5rqAsjXyPu6ifhuUdxvJnbAQGNwqN9/rBW3jKW4LKm63hifSrBY5ZI0aMkCRNmTKlxD7LsuTx8O8PAIBoMGPGDDVq1Ehz5szxb8vIyPB/bYzRzJkzddddd6l3796SpBdeeEH16tXTwoUL1b9//0pfczhRfgqIAbYx8khBwQxbrhIlqIorrQRVaU3DJR0qQxUdN6khmjlVMsLBOyy3bNmi1atXa8uWLfJ4PFq9erVWr16tffv2+Y9p2bKl3njjDUnegMaVV16pzz//XPPmzZPH41FOTo5ycnKUn58vSVqxYoVmzpypr776Sj/++KPmzZunMWPG6Jprrgm6MwMAwsEcyJd8fTQOeuTxlZ3Kd6mgwK2CooCGL0vDY6yir4tnaUge29sk3BjJY+wSjcIBp9nGcmREA9u2yxwENAAAiB5vvvmm2rVrp6uuukppaWk644wz9Mwzz/j3b9y4UTk5Oeratat/W0pKijp06KAVK1ZEYslhRaYGgHKVFsiwLFM0vF+XrEUFINDdd9+t559/3v/4jDPOkCQtX75cF1xwgSRp7dq12r17tyRvXcw333xTktSmTZuguXznJCYm6qWXXtKkSZOUl5enjIwMjRkzRrfccovzLwhA7Cnqo2H2F8o+YOQ5KBXmulSQ71ZeflGWhj+wYSnP9padKrDlH4Hlpzz2oQwN7/97aBQOAACAmLdnz56gx4mJiUpMTCxx3I8//qgnn3xSt9xyi+68805lZ2frpptuUkJCggYPHqycnBxJUr169YLOq1evnn9fNCOoAcQYjyx5jiBJy3WYAlOW5WsSToADzjLGO5yY1ylz587V3LlzD/P8hxbQpEmToMelOfPMM/Xpp5+GY3kAcFjmYIHsA4WyD9hFzcF9ZadKZmkU+JuEe8tcegKzNWxvPw1bRb01ikIaUlGjcAIbqATGtmTsMPfUCPN84fTYY49p5MiRqlatmh577LFyj73pppsqaVUAAESnOMutOJfbkXklqVGjRkHbJ06cqEmTJpU43rZttWvXTtOnT5fkvXny22+/1ezZszV48OCwr6+qIagBxADfRwRH0z8jJJa8ZagAAMAxxd5XKHu/t+xU4UFLhbku5efFKT+wl4btUp7HdShLw1gqMAFZGoHZGra3Sbjx99IgmAE45ZFHHtHAgQNVrVo1PfLII2UeZ1kWQQ0AACJs69atQY3CS8vSkKT69esrMzMzaNspp5yi1157TZKUnp4uSdq+fbvq16/vP2b79u0lKkJEI4IaQIzyZmxULMjh8pedOjRUVIaKLA1UFn8PDAfmBQCUztcY3HPQUmGuW/l57qCSU97G4K6ipuCuopJT3gbhhf7G4AHlp4KahNuyLdtfhooAB5zmRNankxmfR2vjxo2lfg0AAKqe5OTkoKBGWc455xytXbs2aNv//vc/NW7cWJK3aXh6erqWLVvmD2Ls2bNHK1eu1PXXXx/2dVc2ghpADPBmaUh2KYEMW64jKkdVgiUahQMAcIzy7Dcq3O/L0HArPz9OeQVxyi2MU57HrXzbrdyibI18u2SWRoEtFdpGhbYpuiYx8hhbhbJligIaAAAAAEIzZswYderUSdOnT1e/fv302Wef6emnn9bTTz8tyZuBOXr0aN1zzz1q0aKFMjIyNGHCBDVo0EB9+vSJ7OLDgKAGEINsUzKIUdGsDUn+ZuEiSwOVyVje4cS8AIBSeQ4GBzT8Jac8LuXbLm9WhrGC/7Qtf0DjUJNwbw8hXz8Nb56GkS2PbHki/TIRI2xZssP8vm9H0bXwTz/9pDfffFNbtmxRfn5+0L6HH344QqsCAAAV0b59e73xxhsaP368pkyZooyMDM2cOVMDBw70H3P77bdr//79GjlypHbt2qVzzz1XixYtUrVq1SK48vAgqAHEAO8HB6EcV3bGhlXUK8NlGbmskiEMyzLeElRW9PxCBwAAQlNwwBvQyMuNV16BW3kFccorjCsqPeXN0vD10yiwpTy7KDujKKhRUJSh4TFGhcbbT8PjD2h4r1KMbNmGjA3AScuWLdPll1+upk2b6ocfftCpp56qTZs2yRijM888M9LLAwCgyotzxSveFe/AvN4bfNq3by+3262srCxlZWWVe86ll16qSy+9tMz9lmVpypQpmjJlSljXWhUQ1ABiiEeWP0ujvABGcS55AxpWKU3ALcvIklSFywjjGONEHWzfvACA0uXnuZWfF6eCQrfy/cEMl/LsokwN420Onm97R6Gx/AENX4ZGYUBgw1PUQcOmjwYiwIn+XNHSm2v8+PG69dZbNXnyZNWqVUuvvfaa0tLSNHDgQHXv3j3SywMAIOZlZ2eH1FMj1oWhkD6Aqq54MQdfqanSylAV5yolkOHbHpSUYSmgFBUAADiW5OXGKzc/Tgfz43SwIE4HCuOUW5ShkWu7lOvP0jjUS+PQMCr0BTdsU9Qo/FCWhu8rY7wBDkO2BuCY77//XoMGDZIkxcXF6eDBg6pZs6amTJmiGTNmRHh1AAAAoSGoAcQITxm1gyuSseFTPGMj6HF03KSGaGYcHACAUvlKTuUWxinfdhcNbyAjz+MrOWUVlZ2y/AGN4CyNol4aRf00PPLIWLZsy6afBiqVMd7r4nCOaMnUqFGjhr+PRv369bVhwwb/vt9++y1SywIAAKgQyk8BMSDwfsfDNQT3HCbWGZScEZCtYVny9tQgqgGHOVEywjcvAKB0BwvilVcYpzyPS7keb0DjYFGT8HzbUp5tKd9WUQmqon4axbI0/IENHeqnURhUiIosDVSOWC4/dfbZZ+ujjz7SKaecop49e2rs2LH65ptv9Prrr+vss8+O9PIAAKjy4lzxinMlODBvxXtqxDKCGkCM8AT8ouUxLtkBwYuyylC5AzIwvA3CDz0Ozs4gUwMAgGNZXmGccgvd/h4ah/70BTS8pafyPAENwo03sOELZhQao0JjB5We8oY3vL/AGfpqAI57+OGHtW/fPknS5MmTtW/fPr388stq0aKFHn744QivDkBVZw7sqtTnc9VJqtTnA6oCemqEhvJTQAwpnqVxuKyMspQd3Dii6YCKo/QUAFQqX0Aj1+PWQc+hHhq+xuCHMjUO9dLwFDUGLzTGH9gwkr/0lMcq9PfUoPwUKpPt0KiIe++9V+3bt1etWrWUlpamPn36aO3atYc9b8GCBWrZsqWqVaum1q1b65133qnQ8zZt2lSnnXaaJG8pqtmzZ+vrr7/Wa6+9psaNG1fwVQAAAEQGQQ0gBniMZBdFHI4kkOGySv81zRfQCGoQTqNwAACOOQc8bh0IaAqe67H8wxfQyLelPI/3z3yP8TcJ99jewIavQbiv9JQtI9vyf+VtEl70NXCs+/DDD5WVlaVPP/1US5YsUUFBgS655BLt37+/zHM++eQTDRgwQMOHD9eXX36pPn36qE+fPvr2229Dft6mTZvq999/L7F9165datq06RG9FgAAgMpG+SkAksouQVWcyx/ICP7T97UhXQMOo6cGAFS+XI+7KHjhzdAosBWUoVG8j4bHeP/0DV+T8ELZRaNQh4pQ0UsDlasq9NRYtGhR0OO5c+cqLS1Nq1at0vnnn1/qOY8++qi6d++u2267TZI0depULVmyRE888YRmz54d0vNu2rRJHk/JzKi8vDz9/PPPFXoNAAAAkUJQA4gBvo8JfOWnbLnkKQpiHEnmhj+gEfDYkmQs+RuHAwCAY8cBjy+YUdQ/wxQFNTzeklN5Hm9AI6+oMXiexwSVnSqwbX+WhkceGcuWRwXegEbRlYptbBlDGSrEpt27d0uSateuXeYxK1as0C233BK0rVu3blq4cOFh53/zzTf9Xy9evFgpKSn+xx6PR8uWLVOTJk0qtmgAAGKQ24qT2wr/R+q+OWkUHhqCGkCM8Ac0QszIKK54o/DivIEOi/JTcJ5TPTD4qwsAZfKVmSowh7I0CoplaPgCGgW2N6BRUFR2qsB4QxeBWRqF8si2bHlUKF+ow9BXA5XENpId5kwNu+g6Ys+ePUHbExMTlZiYWP65tq3Ro0frnHPO0amnnlrmcTk5OapXr17Qtnr16iknJ+ew6+vTp4//68GDBwfti4+PV5MmTfTQQw8ddh4AAOAsGoWHhqAGEAPKCmh4QvhlzlXsk15fYMNVdGpgZoZl8bkwAADHogMelz87w9cIvMAOzNI41EPDF9AosG3vdmOrwHhU4G0P7s/SCMzUoI8GjhWNGjUKejxx4kRNmjSp3HOysrL07bff6qOPPnJsXbbt/TeWkZGhzz//XMcff7xjzwUAAOA0ghpAjAi8G81TrO9F8cehclneeyqDG4Uf4QKBkFly5i8af3kBoCy5tlRQFNAoNAoObBwmoBFYdiowS8PfLtwUNQk3RduMRzqC8phAqJzsqbF169aguysPl6UxatQo/fvf/9Z//vMfnXDCCeUem56eru3btwdt2759u9LT00NaY0FBgZo2baqdO3cS1AAAAFGN3xaAGOApJaBxuECGO6CMVPGyU65izcEPPSBPAwCAY9GBQksHPdJBj3SgUMr1SLkeozyPUW7RyLeN8j1G+Z6SGRreslMeeSyPP0vD1yTclkc2jcJxjEhOTg4aZQU1jDEaNWqU3njjDb3//vvKyMg47NwdO3bUsmXLgrYtWbJEHTt2DGlt8fHx+vrrr0M6FgAAoCojqAHEkNICGYEZHPZhAh2BpaisYoENyyq5HXCEcXAAAErlDWJI+R5vH41cj1G+x9sQPN/2NgTP9xgV+IMZwQGNAhXIYxV6AxpWYVE4oyCo9JQvawNwmrenRvhHRWRlZemf//yn5s+fr1q1aiknJ0c5OTk6ePCg/5hBgwZp/Pjx/sc333yzFi1apIceekg//PCDJk2apM8//1yjRo0K+XmvueYaPfvssxVbLAAA8It3JTg2JG+j8MzMTM2aNSvCr7Rqo/wUEANsWUEBDU9Rbw27AnFNX3ZGyWBGwGNJYc7kB+Aw27a1fv167dixw19v2+f888+P0KoAVDUHPd7yUh4jeexDXxfaRh7jLTtVaBsVFjUFLzAeeYoag/sCGgXKV6FVWFSIyttPw2MKvKWn5CkqOwXEhieffFKSdMEFFwRtnzNnjoYMGSJJ2rJli1yuQ9frnTp10vz583XXXXfpzjvvVIsWLbRw4cJym4sXV1hYqOeee05Lly5V27ZtVaNGjaD9Dz/88JG9IAAAEBY0Cg8NQQ0gxvgDGubIE7WKxy2KBzcARzmVVRGDf4U//fRTXX311dq8ebOMCf4GWJYlj4cPGAF45XqMCm1fEEPyGO+fBbZd9LVv2P7sDG8PDY88lrePRqEvU0OF/gwNI1u2IUMDlcvJnhqhH3/4C48PPvigxLarrrpKV111VYWeK9C3336rM888U5L0v//9L2ifZXF3EgAAiA4ENYAY4CnK1PCUk5nhKSXI4SrnU15XKYEMb3CDX4bgMGM5kxIUg2lG1113ndq1a6e3335b9evX598vgDIdLCwKWtjyZ2YUD2YUFnXIKAxoCu7roREY0PD11AjK0lBw43Cq5MJJtqzDll09kjmjwfLlyyO9BAAAgKNGUAOIQcXLToWatVFaNoYlybIkPgsFos+6dev06quvqnnz5pFeCoAqLtdj5LEPBTF8ZaaMMUHBDONvCO7NzvCoQLZllwhoGBOcpUHpKaByrV+/Xhs2bND555+vpKQkGcPNSQAAIHpwCxQQI2zj8o5i/+zLy96QDvXSCHxcWpaGJMky3gE4yBjnRqzp0KGD1q9fH+llAIgCBws9OuAp1AG7ULl2oXJNofJNoQ6qQLnKV54KlKc85VneUaB8FVh53lG0NzBDIzhTo6hROMENVJJYvo74/fff1aVLF5100knq2bOntm3bJkkaPny4xo4dG+HVAQBQ9bldcY4NiUbhoSJTA4gBdilldTxylVpyqjQuy5RaispleffZRUEO7u4CosuNN96osWPHKicnR61bt1Z8fHzQ/tNOOy1CKwNQ1eTahUWZGN7MDFtG3lbg3v95LO/XvswMb8ZGQVFZKW/GhpFdFMiwDwU0igIZvtJTAJw1ZswYxcfHa8uWLTrllFP82//85z/rlltu0UMPPRTB1QEAABqFh4agBoCwIqwBx9EoPGz69u0rSRo2bJh/m2VZ/hIUNAoH4LNf+UFBDGP5AhsF3i1FgQxfNw3b3yfD4++T4Q1seLwlp4oCGrbxnh/YKJzgBpxmG6vUm36Ods5o8N5772nx4sU64YQTgra3aNFCmzdvjtCqAAAAKoagBhADDjUKLxohZmgU5ys9FViCqrQBIDps3Lgx0ksAECVyrYPyhS1MUXDDY/m6adhBAYzAQIb/62LBDO9+jz+g4XscGNwAEH779+9X9erVS2zfuXOnEhMTI7AiAACAiiOoAQCILsbyDifmjTGNGzeO9BIARIkD1r4SAQxJJYIYkkoEMrzHBQczvMfZJbYBlcHIkh3m/GITJfnK5513nl544QVNnTpVkjdD07Zt3X///brwwgsjvDoAAIDQENQAYoA3QyO4h4bHWIdtEh4qS5JleQeNwoHosmHDBs2cOVPff/+9JCkzM1M333yzmjVrFuGVAahKcrXPH6yQ5M/CkA6ViyotiBG0vygzw3e+b58voOELcABwzv33368uXbro888/V35+vm6//XZ999132rlzpz7++ONILw8AgCrPbSUozgp/dqPb8l4Tt2/fXm63W1lZWcrKygr78xwrCGoAMeZISk95y03ZclkuuVRUZqpoe/FyU/QKh9Ms40zsLBbjcYsXL9bll1+uNm3a6JxzzpEkffzxx2rVqpXeeustXXzxxRFeIYCqIt8cCApeSPIHMAK3lRbIkFQimBF4TCBLLgIbcJwx3hHuOaPBqaeeqv/973964oknVKtWLe3bt09XXHGFsrKyVL9+/UgvDwCAmEej8NAQ1ABijNuyVWAkt2XkNrYK5C55jGy5ZPzBDJUSCPEFNFyW92vbH+AgqgFEi3HjxmnMmDG67777Smy/4447CGoA8Cse0AjeV3bpKMtyyxiPXHLJli3L8l5TGGP7AxiWVexaJEo+HAaiVUpKiv72t79FehkAAABHLDy1ZwBEBbdV9p2PbssbyHAXuzvSbZmAAIcvkOH9tKGsZuGAo4yDI8Z8//33Gj58eIntw4YN05o1ayKwIgBVWWDwwj5MQ28r4NcMX9DCVfQ/7zaXdyhgWG5ZllsuV7wDqwcOsY3lyIgGc+bM0YIFC0psX7BggZ5//vkIrAgAAKDiCGoAMaJ4sCJwu6tYsONQuSk7aNuhfaUENhTQVwNwkq9RuBMjxtStW1erV68usX316tVKS0ur/AUBqLLKCmiUm6VRLLBRbnCjWIADcJKR5ciIBvfee6/q1KlTYntaWpqmT58egRUBABBd4l0Jjg3J21MjMzNTs2bNivArrdooPwXEMG8pKnfQY5dl/HesB2ZpyEiuoh2BfTUklVKCCkA0GDFihEaOHKkff/xRnTp1kuTtqTFjxgzdcsstEV4dgKqktMyM8gIaPsV7ZPgCG76SVMEHu/y9NxTC3AAqbsuWLcrIyCixvXHjxtqyZUsEVgQAAALRUyM0BDWAGOCWUUHgY8su0U/D2zsj8PGh4Ia/SXjRnx4pqByVJMpPofI4VSoqBv/qTpgwQbVq1dJDDz2k8ePHS5IaNGigSZMm6aabborw6gBUVeX30HAFNQOXgjM2fAGOEn00irhi8L/FqHy28Y5wzxkN0tLS9PXXX6tJkyZB27/66isdf/zxkVkUAABABRHUAGJM8QBH8W2B2RrFszSCAhkmOLBhWfKXoAIQHSzL0pgxYzRmzBjt3btXklSrVq0IrwpAVRRKVoZPaYEN/77DlJbyNRKX8kJ+PgChGzBggG666SbVqlVL559/viTpww8/1M0336z+/ftHeHUAAAChIagBxLigjIyAW9XdslVYlMnhtowKi53jsrwfb1hFjz2y/CWoAEeRqeEIghkAwulQcAKoepxo7B0tjcKnTp2qTZs2qUuXLoqL834cYNu2Bg0aRE8NAAAQNQhqADGkeJaGK6DGtW+fS6YooOE61CzcuA41CC/WV8OXqeGyJEP5KaDKO/PMM7Vs2TIdd9xxOuOMM2SVk171xRdfVOLKAFRlZWZehCF4Yan0UlQAwi8hIUEvv/yypk6dqq+++kpJSUlq3bq1GjduHOmlAQAQFdyuOLld4f9I3Tdn+/bt5Xa7lZWVpaysrLA/z7GCoAYQg1yyg3po+L4ObBzuy+BwBwQyfMe6LJfsgGyN4iWoAEeRqXFUevfurcTERP/X5QU1AMDHyC61dJQv2HG44EZ5gQsXWR2oZEaWTJivWsM9n9NOOukknXTSSZFeBgAAKIZG4aEhqAHEOLe8DcODgxyHemYc6p3haxZe1GdDh8pQ2cYKKkEFoOqaOHGi/+tJkyZFbiEAoo6/yfdh+mIEKi2YUVoQg2wNoHJ4PB7NnTtXy5Yt044dO2TbwVlY77//foRWBgAAEDqCGkCMOFReypYCemUUmEOBDe82b7ZGYINw37GBpadclpExpZegAhxlLO9wYt4Y07RpU2VnZ+v4448P2r5r1y6deeaZ+vHHHyO0MgBVjTEeWZb3WqG04IYxdlC2RvEgRfFARvH9gXO5CHDAYbbxjnDPGQ1uvvlmzZ07V7169dKpp55KxiYAAIhKBDUA+BUvQ+VrFu7rq+E95lCWhqfYn74SVACiw6ZNm+TxeEpsz8vL008//RSBFQGoyozx/vciMLgRStaGq4xgR1mBDJqMA8556aWX9Morr6hnz56RXgoAAMAR4zcGIEa5/RkYdtBjf2ZG0V2YrqL9vuyMQ6WoDmVpuCxvFWFXUbYG4CTLODecMm3aNHXq1EnVq1dXampqSOcMGTJElmUFje7duwcds3PnTg0cOFDJyclKTU3V8OHDtW/fvsPO/eabb+rNN9+UJC1evNj/+M0339Qbb7yhqVOnKiMjo8KvE8Cxyy76n3QouFGWwMCFL6Bhye3fbsklSy655PYPy3LJslxyWXEVKm8FHAlfT41wj2iQkJCg5s2bR3oZAABErTgrXnFWggMjXpK3UXhmZqZmzZpV7jomTZpU4jODli1b+vfn5uYqKytLxx9/vGrWrKm+fftq+/btjn5vKhOZGkAMCc7ECNxe1BTcX6LKBG+3jAr957uCem14jIJKUFmUnwJKyM/P11VXXaWOHTvq2WefDfm87t27a86cOf7HvgbfPgMHDtS2bdu0ZMkSFRQUaOjQoRo5cqTmz59f7rx9+vSRJFmWpcGDBwfti4+PV5MmTfTQQw+FvE4AscOWLZdc/nJU5WVrlN47oyjz0xfg8Ac9grcDcMbYsWP16KOP6oknnqD0FAAAVVBFGoW3atVKS5cu9T+Oizv0Uf+YMWP09ttva8GCBUpJSdGoUaN0xRVX6OOPPw77miOBoAYQA3zBipLbD/XSKF56KqhJuDFBPTZcRf01Av801qE/AUeZouHEvA6ZPHmyJGnu3LkVOi8xMVHp6eml7vv++++1aNEiZWdnq127dpKkxx9/XD179tSDDz6oBg0alDmvryloRkaGsrOzVadOnQqtC0DsMaaoj4bl8gc2QhWYoXG4YAZZGqgMsdxT46OPPtLy5cv17rvvqlWrVoqPjw/a//rrr0doZQAAoKLi4uJK/cxg9+7devbZZzV//nxddNFFkqQ5c+bolFNO0aeffqqzzz67spcadvzWAMQYX7kpH5cOPfaVmvId47JMUBkqd1Hgwvc4sASVJFkSmRqIenv27AkaeXl5EVvLBx98oLS0NJ188sm6/vrr9fvvv/v3rVixQqmpqf6AhiR17dpVLpdLK1euDGn+jRs3EtAAEBIju+S2cspQBZad8v4Z0FcjIKDhLz9VrCQV4CTbWI6MaJCamqo//elP6ty5s+rUqaOUlJSgAQAAose6devUoEEDNW3aVAMHDtSWLVskSatWrVJBQYG6du3qP7Zly5Y68cQTtWLFikgtN6zI1ABilC8jQyo7Y8M2lgrlOlR2KqAsVWAmhzGHghuENBDtGjVqFPR44sSJmjRpUqWvo3v37rriiiuUkZGhDRs26M4771SPHj20YsUKud1u5eTkKC0tLeicuLg41a5dWzk5OSE/z/79+/Xhhx9qy5Ytys/PD9p30003heW1ADg2GNmSKZmtcbiG4YHZGMUDGqV/zX1XgFMCy1oCAICqZ8+ePUGPExMTS5SilqQOHTpo7ty5Ovnkk7Vt2zZNnjxZ5513nr799lvl5OQoISGhRE/PevXqVejzgqqMoAYQI3zBCimgd0bQtoDARkBoorS+Gq6iO9F8pac8RccZy8gTJXepIXpZcqapt+9v7tatW4PqV5Z28SBJ48aN04wZM8qd8/vvvw9q1FUR/fv393/dunVrnXbaaWrWrJk++OADdenS5YjmLO7LL79Uz549deDAAe3fv1+1a9fWb7/9purVqystLY2gBgA/Xw8N79e2PzhRnqCG4aUENIKCHf6vXWRqwHFOVLLkxh4AAGJDnBWnOCv8H6n75gz1RssePXr4vz7ttNPUoUMHNW7cWK+88oqSkpLCvr6qhqAGEOPclvE3DQ/sveELWBTvq+GWkV2UleGybLlkebM0irYT0kC0S05ODqkp19ixYzVkyJByj2natGmYVuWdq06dOlq/fr26dOmi9PR07dixI+iYwsJC7dy5s8w+HMWNGTNGl112mWbPnq2UlBR9+umnio+P1zXXXKObb745bGsHEP18PTVkBZeSCgx2eHcHBySsYkGKsgIarmLZGgCckZGRUW6D8B9//LESVwMAAIoL9UbL4lJTU3XSSSdp/fr1uvjii5Wfn69du3YFZWts37495M8LqjqCGkAMCc7GsKWir4NLURnZAY9dlpHb2CqUOzhLo5QSVK6A/hqAY4zlHU7MWwF169ZV3bp1w7+OMvz000/6/fffVb9+fUlSx44dtWvXLq1atUpt27aVJL3//vuybVsdOnQIac7Vq1frqaeeksvlktvtVl5enpo2bar7779fgwcP1hVXXOHY6wEQ3YyxZVsKuVSUZblKBDiKBzT8gQ5DUAPOMgp/D4xoubVn9OjRQY8LCgr05ZdfatGiRbrtttsisygAKEN88+MjvQSg0oV6o2Vx+/bt04YNG/SXv/xFbdu2VXx8vJYtW6a+fftKktauXastW7aoY8eO4V5yRBDUAGJYUGaGZbyBDnMo0GHLCghuePtq+L52GavoHG8gww74GkCwLVu2aOfOndqyZYs8Ho9Wr14tSWrevLlq1qwpydu0695779Wf/vQn7du3T5MnT1bfvn2Vnp6uDRs26Pbbb1fz5s3VrVs3SdIpp5yi7t27a8SIEZo9e7YKCgo0atQo9e/fXw0aNAhpXfHx8XK5vP+u09LStGXLFp1yyilKSUnR1q1bw/+NABC1fP00JJXI1ijOZblKZGwECszWCAxouIz3kSV3KW3JAYRDWZmYs2bN0ueff17JqwEAAEfq1ltv1WWXXabGjRvrl19+0cSJE+V2uzVgwAClpKRo+PDhuuWWW1S7dm0lJyfrxhtvVMeOHXX22WdHeulhQVADiDGBgQzv40PZG5L8JaUCe23YliWXjNxFwQu3vP01Ao93WUYeI1kENeA0Jwph++Z1yN13363nn3/e//iMM86QJC1fvlwXXHCBJO9dE7t375Ykud1uff3113r++ee1a9cuNWjQQJdccommTp0alHo6b948jRo1Sl26dJHL5VLfvn312GOPhbyuM844Q9nZ2WrRooU6d+6su+++W7/99ptefPFFnXrqqWF45QBimT94EZClEUpAw1WUTwo4xS4a4Z4zmvXo0UPjx4+nkTgAAFHip59+0oABA/T777+rbt26Ovfcc/Xpp5/6K0o88sgj/s8J8vLy1K1bN/3973+P8KrDh6AGEIMCS0/5HpcIbigg88IEbCvK2AjM0vD12yBTAyjd3LlzNXfu3HKPMebQv52kpCQtXrz4sPPWrl1b8+fPP+J1TZ8+XXv37pUkTZs2TYMGDdL111+vFi1a6LnnnjvieQEce4yxJUshZ2uU53ABDVeUlPEBjiWvvvqqateuHellAABQ9dmF3uHEvJLat28vt9utrKws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4PtNlrMBkVRRemqUh5deeklt2rRRz549NXfuXP3888/lPSUAAKKLxyNlR2DzeC/26datm1JSUjRnzpxSTfOxxx7TBRdcoGHDhql3795KSkrSyy+/HI7fQIXApZxADPEU2EfDPysjeLaGbaw8vTMKOK6UAROgvIVSv1KSJk+erIceeqjQsb799lu1bdu21HN69tlnddVVV+VrADZp0iTndseOHVWtWjVdd911mjlzZrlnlwCITXkDGwUeRzYGUC6++uorbd68WcuWLdOsWbM0YcIEnXvuubrqqqs0dOhQ1ahRo7ynCABATFu/fn2R5aeCef/99wPux8fHa86cOaUOjlRUBDWAGGaH2CA88Dl+AZACghxAJFnGu0ViXCm0+pWSdOutt2rUqFGFHpO3/0VJfPjhh9q2bZteeOGFIo/t3r27srOz9f333+vUU08t9bkBIFQEKRBNjPFu4R4zWrRr104zZszQjBkz9PHHH2v58uWaMGGCrr/++nxlOAEAACoighpADPAU0vg7lAbh+QIbBTxm01QcMaR+/fqqX79+xM+zaNEidenSRaeffnqRx27atEkul0sNGjSI+LwAxLZQgxghZW4QEAHKTc2aNVW9enVVq1ZNR44cKe/pAAAAhIRvIIEYEVBWyrgCsixCCWx45AqpSTgZG4i4CPfUiITdu3dr06ZN2r17tzwejzZt2qRNmzbp6NGjzjFt27bVK6+8EvC8w4cP66WXXtK1116bb8x169Zp9uzZ+uqrr/Tdd99p2bJlmjhxov70pz/ppJNOityLARDzCgpo+PfWCOixYeygmzHZ3q2g5wERYkdoixa7du3SAw88oHbt2qlr167auHGj7rvvPu3fv7+8pwYAABASMjWAGGLniWMGBi2C98XwhBj7JJgBFOzee+/V0qVLnftnnHGGJGnNmjXq27evJGnbtm06dOhQwPOef/55GWM0YsSIfGPGxcXp+eef19SpU5WRkaHk5GRNnDgxoM8GAJSFfEGIIEGPYE3EA0XTV8JA9OrRo4fWr1+vjh07avTo0RoxYoSaNGlS3tMCACB6ZGZJme7IjCtvo3C32620tDSlpaWF/zyVBEENIAb4BzM8yltKKrQm4c4xlJtCOYt0T41IWLJkiZYsWVLoMSZIMe5x48Zp3LhxQY/v3LmzPv3003BMDwBKLCBYkSdQ4f9YYBCjsAAH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JSUl6ZNPPtGPP/6oa665RlWrVtWMGTMi8loAAKgMItHUm0bhAAAAZYegBgAAETRo0CANGjTIud+qVStt27ZN8+bNKzKoUaNGDSUlJQV97J133tGWLVv07rvvqmHDhurUqZOmT5+uO++8U1OnTlW1atXC+joAAAAAAAAqAspPAQCiS5SVnwrm0KFDqlu3bpHHLVu2TCeffLLat2+vu+66S8ePH3ceW7dunTp06KCGDRs6+wYOHKjDhw9r8+bNEZk3AACVgTF2RDYAAACUDTI1AADwc/jw4YD7cXFxiouLC9v4O3bs0JNPPllklsaVV16pFi1aqHHjxvr666915513atu2bXr55ZclSfv37w8IaEhy7u/fvz9s8wUAAAAAAF7Z2VJ2BNIEsmkUXiwENQAA0SVSWRU5YzZr1ixg95QpUzR16tR8h0+ePFkPPfRQoUN+++23atu2rXN/7969GjRokC677DKNHTu20OeOGzfOud2hQwc1atRI/fv3186dO9W6deuiXg0AACiAiUBvrkiMCQAAYs/69euVkJBQ3tOo8AhqAADgZ8+ePQFvIArK0rj11ls1atSoQsdq1aqVc3vfvn3q16+fevbsqYULFxZ7Xt27d5fkzfRo3bq1kpKS9Pnnnwcck56eLkkF9uEAAAAAAACIdgQ1AADRxTaSIpCpYXvHTEhICOmqiPr166t+/fohDb13717169dPXbp00eLFi+VyFT9XddOmTZKkRo0aSZJSU1P1wAMP6MCBA2rQoIEkadWqVUpISFBKSkqxxwcAIFZEov8FPTUAAADKDo3CAQCIoL1796pv375q3ry5Zs2apZ9++kn79+8P6Huxd+9etW3b1sm82Llzp6ZPn64NGzbo+++/17///W9dc8016t27tzp27ChJOu+885SSkqKrr75aX331ld5++23dfffdSktLC2sPEAAAAAAAgIqETA0AQFQxxo6qKyxXrVqlHTt2aMeOHWratGmec3qzQ7KysrRt2zYdP35cklStWjW9++67mj17to4dO6ZmzZpp2LBhuvvuu53nut1uvf7667rhhhuUmpqqmjVrauTIkZo2bVpEXgcAAJVFNL2PAAAAFUtWllGWK/zVI7JyqkfQKDw0BDUAAIigUaNGFdl7o2XLlk6AQ/I2K//ggw+KHLtFixZ68803SztFAAAAAABQAdAoPDQENQAA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J9pMnDhRb7/9tu666y4999xzGjRokCRp5MiR+uabb/TAAw/oueeeU9euXcN63pL83j7++GO98847uvPOO519Bw8e1FVXXaWTTjpJrVq10qJFi/I974svvlCNGjW0a9eufI/deeed+uc//6mvvvqqRK8DQMVR1PpRnubOnaslS5aU9zRK5JdfftHll1+u6tWra86cOXruuedUs2ZNbd26VaNGjVLr1q319NNPa+HChWE/d0l+b9OmTVP37t111llnOfs+/vhjde7cWbVr11bfvn21devWfM+7+eabNXDgwHz769Wrp2uvvVb33HNPsecPlIUq5T0BlJ9p06YpOTk53/42bdqEPMa+fft03333qWXLlurUqVMYZxfcjBkzNHz4cA0dOjTi5wIQu15++WWNGDFCdevW1ZgxY5ScnKzvv/9eixYt0ooVK/T888/rkksuKe9plpnjx4/rvvvuk6R8V0ndfffdmjx5cpnPKSsrS71799bWrVs1cuRIjR8/XkePHtXmzZu1fPlyXXLJJWrcuHGZz6ssPfvss8rOztaIESOcfcuWLdOMGTN05513qmbNmnrggQfUsGFD3XXXXc4xDzzwgFq2bKkrr7wy35jx8fEaOXKkHn30UY0fP54sHKCC27ZtmxPULGuffPKJ7rvvPo0aNSrfVarlOa9Qvffee7r44ot12223Oft+//13rVu3Tn/961910003ReS8hf3eCvLII4+of//+AZ/TbrvtNr3//vu67777tGPHDo0dO1annXaaevbsKckb5L755ps1YcKEoJ/5zjjjDHXt2lV/+9vf9Pe//z0srw0A8po7d65OPvnkfNl7vXv31u+//65q1aqVz8RCsH79eh05ckTTp0/XgAEDnP3vv/++bNvW448/Xqzvz4qjoN9bQX766SctXbpUS5cudfYdOnRIF198sXr06KFx48ZpyZIlGjZsmL7++mu53W5J3gv5nn76aW3YsCHouNdff72eeOIJvffeezrnnHNK/bqAcCKoEcMGDx4c9iuPACDa7dy5U1dffbVatWqltWvXqn79+s5jt9xyi84++2xdffXV+vrrr9WqVatynGl+tm0rMzNT8fHxZXbOKlWqqEqVsn878eqrr2rjxo1atmxZvi/nT5w4kS87oaSys7Nl23aF/MC1ePFiXXTRRQH/vl9//XVdddVVmjZtmiTvF3T//ve/naDGzp079fjjj2vt2rUFjnv55Zfr4Ycf1po1a/jwAlRwcXFx5T2FoCrqvPwdOHAgX1Dhp59+kqQKU0pE8s7zjTfe0Pz58wP2v/7663r44Yd1zTXXSJK+/vprvfbaa05QY9myZfrhhx/0l7/8pcCxL7/8ck2ZMkVz585VrVq1IvciACAPl8tVpp9ZSuLAgQOS8q8JBe0vT//4xz9UpUoVXXjhhc6+devW6ffff9eKFSsUHx+vQYMGKTk5WTt27NCpp54qSZowYYLGjh2rlJSUoOOedtppat++vZYsWcLnAlQ4FfvyGZSbKVOmyOVyafXq1QH7x40bp2rVqumrr77S+++/r27dukmSRo8e7ZSv8k+R++yzzzRo0CAlJiaqRo0a6tOnT776fr567Dt27HCuWEpMTNTo0aN1/Phx5zjLsnTs2DEtXbrUOZcvan3kyBFNmDBBLVu2VFxcnBo0aKBzzz1XX375ZWR+QQAqrUceeUTHjx/XwoULAwIaknTyySdrwYIFOnbsmB5++OF8z/355591+eWXKyEhQfXq1dMtt9yiEydOBByzatUq9erVS3Xq1FGtWrV06qmn5vvCISMjQ1OmTFGbNm0UFxenZs2a6Y477sjX58CyLN10001atmyZ2rVrp7i4OL322muqW7euRo8enW9+hw8fVnx8vHNVamZmpu6991516dJFiYmJqlmzps4++2ytWbPGec7333/v/B7uu+8+5+/v1KlTJQXvqZGdna3p06erdevWiouLU8uWLfWXv/wl3/x99dw/+ugjnXnmmYqPj1erVq1CumJ0586dkhSQXu0THx+vhIQE5/6oUaNUq1Ytfffddxo4cKBq1qypxo0ba9q0aTLGBLxWy7I0a9YszZ4925n/li1bJElbt27V8OHDVbduXcXHx6tr167697//HXDuX3/9Vbfddps6dOigWrVqKSEhQYMHDw5a3uN///ufhg4dqpo1a6pBgwaaOHFiyL0sdu3apa+//jrgqjHJG8Q46aSTnPt169YNWEtvvfVWXXHFFYVe1NClSxfVrVtX//rXv0KaC4DyE6x3xddff60+ffqoevXqatq0qe6//34tXry4wN4VJfkbPHXqVN1+++2SpOTkZGdt8I0fbF6bN2/WOeecEzCvgvoBvfXWWzr77LNVs2ZN1a5dW0OGDAm5/ON3332nyy67THXr1lWNGjXUo0cPvfHGG87jvjItxhjNmTMnYF1r0aKFJOn222+XZVlq2bKlpNA/axT12aeo31swb7zxhrKzs4v19/7YsWOaPHmyZs6cWWiw4txzz9WxY8e0atWqQn6jACqLjRs3avDgwUpISFCtWrXUv3//gPLjBw8elNvt1hNPPOHs+/nnn+VyuVSvXr2A98033HCDkpKSCj1fy5YttXnzZn3wwQfO3ztf1ndBPTUWLlyo1q1bq3r16jrzzDP14YcfBh071M9LBXnppZfUpUsXVa9eXSeffLL+9Kc/ae/evc7jffv21ciRIyVJ3bp1c75/atmypaZMmSJJql+/fsDnoi+++EIDBw7UySefrOrVqys5OVl//vOfA85r27Zmz56tdu3aKT4+Xg0bNtR1112n3377LaTfW0FeffVVde/ePeBv/u+//674+HgneFS3bl1JctYK30Vivoz8gpx77rl67bXXAv79AxUBmRox7NChQ/ma2lqWpXr16unuu+/Wa6+9pjFjxuibb75R7dq19fbbb+vpp5/W9OnTdfrppys9PV3Tpk3Tvffeq3Hjxunss8+WJOfqoPfee0+DBw9Wly5dnCDJ4sWLdc455+jDDz/UmWeeGXDuyy+/XMnJyZo5c6a+/PJLPfPMM2rQoIEeeughSd5GTNdee63OPPNMjRs3TpLUunVrSd6UuBUrVuimm25SSkqKfvnlF3300Uf69ttv1blz54j+HgFULq+99ppatmzp/E3Lq3fv3mrZsmXAFyQ+l19+uVq2bKmZM2fq008/1RNPPKHffvvN+YJo8+bNuuCCC9SxY0dNmzZNcXFx2rFjR8AXHrZt66KLLtJHH32kcePG6bTTTtM333yjxx57TP/973/z9RV677339OKLL+qmm27SySefrFNOOUWXXHKJXn75ZS1YsCAgw+DVV19VRkaGrrjiCkneIMczzzyjESNGaOzYsTpy5IgWLVqkgQMH6vPPP1enTp1Uv359zZs3TzfccIMuueQSXXrppZKkjh07Fvg7vPbaa7V06VINHz5ct956qz777DPNnDlT3377rV555ZWAY3fs2KHhw4drzJgxGjlypJ599lmNGjVKXbp0Ubt27Qo8h++Lp7///e+6++67iyyT5PF4NGjQIPXo0UMPP/ywVq5cqSlTpig7O9vJavBZvHixTpw4oXHjxikuLk5169bV5s2bddZZZ6lJkyaaPHmyatasqRdffFFDhw7VP//5T6cc2XfffadXX31Vl112mZKTk5Wenq4FCxaoT58+2rJli1MS6/fff1f//v21e/du3XzzzWrcuLGee+45vffee4W+Dp9PPvlEkvKtcd26ddPcuXN12WWXqWbNmlqwYIGzLq9atUrvvfee/vvf/xY5fufOncPWZBBA8QR7jy55y+4VZe/everXr58sy9Jdd92lmjVr6plnnikwc6Kkf4MvvfRS/fe//9X//d//6bHHHtPJJ58sSfkuBvDZv3+/+vXrp+zsbOdv6MKFC1W9evV8xz733HMaOXKkBg4cqIceekjHjx/XvHnz1KtXL23cuNEJNASTnp6unj176vjx47r55ptVr149LV26VBdddJFWrFihSy65RL1799Zzzz2nq6++Wueee66T6dCxY0fVqVNHEydO1IgRI3T++ec7Xw6F8lkjlM8+xf29Sd6/9/Xq1XPWPZ9u3brp0UcfVdu2bfXdd99p5cqVevrppyV5S/Y2adJEV199dYHjSlJKSoqqV6+ujz/+OKbKagKxaPPmzTr77LOVkJCgO+64Q1WrVtWCBQvUt29fffDBB+revbvq1Kmj9u3ba+3atbr55psleQPflmXp119/1ZYtW5y14cMPPyzw85LP7NmzNX78eNWqVUt//etfJUkNGzYs8PhFixbpuuuuU8+ePTVhwgR99913uuiii1S3bl01a9bMOa64n5fyWrJkiUaPHq1u3bpp5syZSk9P1+OPP66PP/5YGzduVJ06dfTXv/5Vp556qhYuXOiUbm/durWGDh2qv//973rllVc0b9481apVSx07dtSBAwd03nnnqX79+po8ebLq1Kmj77//Xi+//HLAua+77jrn/DfffLN27dqlp556Shs3btTHH3+sqlWrFvv3lpWVpfXr1+uGG24I2H/GGWfo0KFD+tvf/qbhw4dr9uzZSkxM1KmnnqqMjAzdeuutuu+++wIC5MF06dJFjz32mDZv3lyhensBMog5ixcvNpKCbnFxcc5x33zzjalWrZq59tprzW+//WaaNGliunbtarKyspxj1q9fbySZxYsXB5zDtm1zyimnmIEDBxrbtp39x48fN8nJyebcc8919k2ZMsVIMn/+858DxrjkkktMvXr1AvbVrFnTjBw5Mt9rSkxMNGlpaSX5dQCA4+DBg0aSufjiiws97qKLLjKSzOHDh40xuX/HLrroooDjbrzxRiPJfPXVV8YYYx577DEjyfz0008Fjv3cc88Zl8tlPvzww4D98+fPN5LMxx9/7OyTZFwul9m8eXPAsW+//baRZF577bWA/eeff75p1aqVcz87O9tkZGQEHPPbb7+Zhg0bBvxN/umnn4wkM2XKlHzz9b12n02bNhlJ5tprrw047rbbbjOSzHvvvefsa9GihZFk1q5d6+w7cOCAiYuLM7feemu+c/k7fvy4OfXUU40k06JFCzNq1CizaNEik56enu/YkSNHGklm/Pjxzj7bts2QIUNMtWrVnH8fu3btMpJMQkKCOXDgQMAY/fv3Nx06dDAnTpwIGKNnz57mlFNOcfadOHHCeDyegOfu2rXLxMXFmWnTpjn7Zs+ebSSZF1980dl37Ngx06ZNGyPJrFmzptDXf/fddxtJ5siRIwH7Dx8+bHr16uWs6+3atTP/+9//TFZWlklJSTEPPvhgoeP6jBs3zlSvXj2kYwGER2Hv0f3/P+2vRYsWAe+Nx48fbyzLMhs3bnT2/fLLL6Zu3bpGktm1a1fAc0v6N9gYYx555JF8YxY0rwkTJhhJ5rPPPgs4V2JiYsAYR44cMXXq1DFjx44NGG///v0mMTEx3/68fOfxX0OPHDlikpOTTcuWLQP+PkvK9/nBtw488sgjAfuL+qxRnM8+hf3egunVq5fp0qVLvv1ff/21adq0qfPfxrBhw4zH4zHfffedqV69ulm3bl1I4//hD38wgwcPDulYABWTb/1Yv359gccMHTrUVKtWzezcudPZt2/fPlO7dm3Tu3dvZ19aWppp2LChc3/SpEmmd+/epkGDBmbevHnGGO+6YlmWefzxx4ucW7t27UyfPn3y7V+zZk3Ae97MzEzToEED06lTp4DPJwsXLjSSAsYozuelvHznad++vfn999+d/a+//rqRZO69915nX0G/V9/nH//PdK+88kqR/w4+/PBDI8ksW7YsYP/KlSvz7S/o9xbMjh07jCTz5JNP5nvskUceMW6320gy1atXN8uXLzfGGPPAAw+Y9u3bm+zs7CLH/+STT4wk88ILL4Q0H6CsUH4qhs2ZM0erVq0K2N566y3n8fbt2+u+++7TM888o4EDB+rnn3/W0qVLQ6qdvmnTJm3fvl1XXnmlfvnlF/3888/6+eefdezYMfXv319r167Nl25+/fXXB9w/++yz9csvv+jw4cNFnq9OnTr67LPPtG/fvhBfPQDkd+TIEUlS7dq1Cz3O93jev09paWkB98ePHy9JevPNNyXl1l3917/+VWDJjZdeekmnnXaa2rZt6/zt/Pnnn50apv6loSSpT58++WqgnnPOOTr55JP1wgsvOPt+++03rVq1Sn/84x+dfW6328nksG1bv/76q7Kzs9W1a9cSl+/zvdZJkyYF7L/11lslKV+GS0pKSsBVXvXr19epp56q7777rtDzVK9eXZ999plTxmPJkiUaM2aMGjVqpPHjxwdNPfdv+uor3ZWZmal333034Lhhw4YFXDX766+/6r333tPll1+uI0eOOP9OfvnlFw0cOFDbt2930tXj4uKc5rgej0e//PKLU2bM/3f65ptvqlGjRho+fLizr0aNGk4mYlF++eUXValSJV9Zkdq1a+uDDz7Q5s2btWnTJm3atElNmjTR3LlzlZGRoYkTJ2rLli3q16+fmjRpoj/96U9B19mTTjpJv//+e0DpKgBlI9h79FWrVhWaIeezcuVKpaamqlOnTs6+unXr6qqrrgp6fEn/BhfXm2++qR49egRkatevXz/fvFatWqWDBw9qxIgRAWug2+1W9+7d862Bwc5z5plnqlevXs6+WrVqady4cfr++++dcoLFVdRnjZJ89gnVL7/8EvQq2g4dOmj79u1av369tm/frhUrVsjlcunWW2/VsGHD1KNHD7388ss6/fTTlZycnK/kos9JJ50UNDMIQOXh8Xj0zjvvaOjQoQE9ARs1aqQrr7xSH330kfN+8Oyzz1Z6erq2bdsmyZuR0bt3b5199tlOKaiPPvpIxpgiMzWK44svvtCBAwd0/fXXB2Sajxo1SomJiQHHFvfzUrDz3HjjjQE9PYYMGaK2bdsGzcYPhe9z3uuvv15gZuVLL72kxMREnXvuuQHz7tKli2rVqlXkGleQX375RZKCrhW33Xab9u7dq3Xr1mnv3r0aMWKE9u3bp5kzZ2r27NnKzs7W+PHj1bx5c5155plBM7V947JWoKKh/FQMO/PMM4tsFH777bfr+eef1+eff64ZM2YU2Dwor+3bt0uSU4MwmEOHDgX80W3evHnA477Hfvvtt4Da6ME8/PDDGjlypJo1a6YuXbro/PPP1zXXXFPhmvgCqNh8wQpfcKMgBQU/TjnllID7rVu3lsvlcmpl//GPf9Qzzzyja6+9VpMnT1b//v116aWXavjw4c4X4du3b9e3335bYCkKX2M6n+Tk5HzHVKlSRcOGDdPy5cuVkZGhuLg4vfzyy8rKygoIakjS0qVL9be//U1bt24NeAMebNxQ/PDDD3K5XGrTpk3A/qSkJNWpU0c//PBDwP68f/sl799//7qyBUlMTNTDDz+shx9+WD/88INWr16tWbNm6amnnlJiYqLuv/9+51iXy5VvTfjDH/4gSflqmed97Tt27JAxRvfcc4/uueeeoHM5cOCAmjRpItu29fjjj2vu3LnatWuXPB6Pc0y9evWc2z/88IPatGmTr2yWr2lfabhcroD1+ueff9bUqVP17LPPyrIsXXDBBbrgggv0yCOPaNKkSRo/fryWLl0aMIbvi6+iynoBCL+C3qOH8uXzDz/8oNTU1Hz78/5N9inqb7DH43GaZ/vUrVs34AunUPzwww/q3r17vv15/+b5PkMU1Iy0qM8EBZ3ntNNOcx4vSemMoj5rlOSzT3EEC0ZIcvo7+bz33nt65513tG3bNm3btk1XXHGFFixYoJYtW2rEiBFq1qxZvp5bxhj+1gOV3E8//aTjx48HfZ952mmnybZt7dmzR+3atXMCFR9++KGaNm2qjRs36v7771f9+vU1a9Ys57GEhASdfvrpkqSjR4/q6NGjzphut7vQsnrB+D4j5P08VbVq1Xzv4Yv7eSnYeYL9Ltq2bauPPvqoWPP26dOnj4YNG6b77rtPjz32mPr27auhQ4fqyiuvdEpAbt++XYcOHVKDBg2KPe9QFLRWNGzYMKB81Z133qn+/furf//+uvvuu7V69Wq98MILWrNmjYYMGaLvv/8+oAk6nwtQURHUQKG+++475036N998E/LzfFciPfLIIwFXivnLe3Wp2+0OelxBf5j9XX755Tr77LP1yiuv6J133tEjjzyihx56SC+//LIGDx4c8rwBxLbExEQ1atRIX3/9daHHff3112rSpEmRX67kfeNXvXp1rV27VmvWrNEbb7yhlStX6oUXXtA555yjd955R263W7Ztq0OHDnr00UeDjulfT9Y3ZjC+LzLeeustDR06VC+++KLatm3rfPiQpH/84x8aNWqUhg4dqttvv10NGjSQ2+3WzJkznUbcJRXqm97S/O3316JFC/35z3/WJZdcolat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YmKi2rVrF9J8gLJCpkYMe+uttwLe6Pr07NlTGRkZuueeezRq1ChdeOGFkrx/ADt16qQbb7xRL774oiRvhLxOnTqaP3++ateurZo1a6p79+5KTk7WM888o8GDB6tdu3YaPXq0mjRpor1792rNmjVKSEjQa6+9Vuw5d+nSRe+++64effRRJy3y1FNPVdOmTTV8+HCdfvrpqlWrlt59912tX79ef/vb30r3SwIQc0455RQtXbpUV111lTp06KAxY8YoOTlZ33//vRYtWqSff/5Z//d//+dc3eJv165duuiiizRo0CCtW7dO//jHP3TllVc6VxZNmzZNa9eu1ZAhQ9SiRQsdOHBAc+fOVdOmTZ2rm66++mq9+OKLuv7667VmzRqdddZZ8ng82rp1q1588UW9/fbbRfZD8vnjH/+oJ598UlOmTFGHDh3yXV1zwQUX6OWXX9Yll1yiIUOGaNeuXZo/f75SUlICvpSpXr26UlJS9MILL+gPf/iD6tatq/bt2wetS3766adr5MiRWrhwoQ4ePKg+ffro888/19KlSzV06FD169cv5H8XhVm1apWmTJmiiy66SD169FCtWrX03Xff6dlnn1VGRoamTp0acHx8fLxWrlypkSNHqnv37nrrrbf0xhtv6C9/+UtIqd5z5sxRr1691KFDB40dO1atWrVSenq61q1bp//973/66quvJHl/p9OmTdPo0aPVs2dPffPNN1q2bFm+WsBjx47VU089pWuuuUYbNmxQo0aN9NxzzzkBpKK0atVK7du317vvvqs///nPQY956aWX9PXXXwdc4ZuamqqGDRvqsssu06WXXqpZs2bp0ksvDShBs2HDBv3666+6+OKLQ5oLgIrjjjvu0D/+8Q+de+65Gj9+vGrWrKlnnnlGzZs316+//hrWethdunSRJP31r3/VFVdcoapVq+rCCy90vrTPO6/nnntOgwYN0i233KKaNWtq4cKFatGiRUDJx4SEBM2bN09XX321OnfurCuuuEL169fX7t279cYbb+iss84KCFDnNXnyZP3f//2fBg8erJtvvll169bV0qVLtWvXLv3zn/8MKLMXqiNHjhT5WcPlcoX82ac4vzfJezFAlSpV9O6772rcuHFBj7nnnnvUoUMHXXbZZc6+YcOGadq0abrhhhvUokULLViwIF+pllWrVqlGjRo699xzi/17AVDxPPvss1q5cmW+/bfccovuv/9+rVq1Sr169dKNN96oKlWqaMGCBcrIyNDDDz8ccLwvYLFt2zbNmDHD2d+7d2+99dZbiouLU7du3UKaU5cuXTRv3jzdf//9atOmjRo0aBC0b1LVqlV1//3367rrrtM555yjP/7xj9q1a5cWL16c7310aT4vVa1aVQ899JBGjx6tPn36aMSIEUpPT9fjjz+uli1bauLEiSG9rryWLl2quXPn6pJLLlHr1q115MgRPf3000pISHAu+urTp4+uu+46zZw5U5s2bdJ5552nqlWravv27XrppZf0+OOPa/jw4cX6vflcfPHF+utf/6rDhw8HLZF85MgR/eUvf9GMGTMCStcOHz5c06ZNk23b+vjjj3XixAlnvj6rVq3ShRdeSE8NVDwGMWfx4sVGUoHbM888Y7p162aaNm1qDh48GPDcxx9/3EgyL7zwgrPvX//6l0lJSTFVqlQxkszixYudxzZu3GguvfRSU69ePRMXF2datGhhLr/8crN69WrnmClTphhJ5qeffgo6z127djn7tm7danr37m2qV69uJJmRI0eajIwMc/vtt5vTTz/d1K5d29SsWdOcfvrpZu7cueH9xQGIKV9//bUZMWKEadSokalatapJSkoyI0aMMN98802+Y31/x7Zs2WKGDx9uateubU466SRz0003md9//905bvXq1ebiiy82jRs3NtWqVTONGzc2I0aMMP/9738DxsvMzDQPPfSQadeunYmLizMnnXSS6dKli7nvvvvMoUOHnOMkmbS0tAJfg23bplmzZkaSuf/++4M+PmPGDNOiRQsTFxdnzjjjDPP666+bkSNHmhYtWgQc+8knn5guXbqYatWqGUlmypQpAa/dX1ZWlrnvvvtMcnKyqVq1qmnWrJm56667zIkTJwKOa9GihRkyZEi+efXp08f06dOnwNdljDHfffeduffee02PHj1MgwYNTJUqVUz9+vXNkCFDzHvvvRdw7MiRI03NmjXNzp07zXnnnWdq1KhhGjZsaKZMmWI8Ho9z3K5du4wk88gjjwQ9586dO80111xjkpKSTNWqVU2TJk3MBRdcYFasWOEcc+LECXPrrbeaRo0amerVq5uzzjrLrFu3Luhr+uGHH8xFF11katSoYU4++WRzyy23mJUrVxpJZs2aNYW+fmOMefTRR02tWrXM8ePH8z12/Phx06JFC/PEE0/ke2z9+vWmc+fOpnbt2ubCCy80Bw4cCHj8zjvvNM2bNze2bRc5BwDh43vvu379+qCP9+nTx7Rr1y5gX4sWLczIkSMD9m3cuNGcffbZJi4uzjRt2tTMnDnTPPHEE0aS2b9/f8BzS/o32Gf69OmmSZMmxuVyBbxvDzavr7/+2vTp08fEx8ebJk2amOnTp5tFixble79vjDFr1qwxAwcONImJiSY+Pt60bt3ajBo1ynzxxRdFzmnnzp1m+PDhpk6dOiY+Pt6ceeaZ5vXXX893XLA1NNg6UJzPGqF89ins91aQiy66yPTv3z/oY19//bWpVq2a2bhxY77HlixZYlq2bGnq1atnJk2aZLKzswMe7969u/nTn/5U6LkBVHxFfcezZ88eY4wxX375pRk4cKCpVauWqVGjhunXr5/55JNPgo7ZoEEDI8mkp6c7+z766CMjyZx99tkhz23//v1myJAhpnbt2kaSs76sWbMm6HveuXPnmuTkZBMXF2e6du1q1q5dG3RdCvXzUkFeeOEFc8YZZ5i4uDhTt25dc9VVV5n//e9/AccUtC4H+w7ryy+/NCNGjDDNmzc3cXFxpkGDBuaCCy4Ium4tXLjQdOnSxVSvXt3Url3bdOjQwdxxxx1m3759Rf7eCpKenm6qVKlinnvuuaCP33777aZr16753t8fPXrUXHPNNaZOnTqmbdu2ZuXKlQGPf/vtt0aSeffddws9P1AeLGOK2YkTAAAgiowaNUorVqwIWhIkmh06dEitWrXSww8/rDFjxoRlzIyMDLVs2VKTJ0/WLbfcEpYxAZS/CRMmaMGCBTp69GiBzcFRcX344Yfq27evtm7dGram3ps2bVLnzp315ZdfFtjcHAAQPcaMGaP//ve/+vDDD8M25oQJE7R27Vpt2LCBTA1UOPTUAAAAiEKJiYm644479Mgjj8i27bCMuXjxYlWtWlXXX399WMYDUPZ+//33gPu//PKLnnvuOfXq1YuARpQ6++yzdd555+UrEVMaDz74oIYPH05AAwAqiSlTpmj9+vX6+OOPwzLeL7/8omeeeUb3338/AQ1USGRqAACASq2yZmoAQDCdOnVS3759ddpppyk9PV2LFi3Svn37tHr1avXu3bu8pwcAAACUGo3CAQAAAKCSOP/887VixQotXLhQlmWpc+fOWrRoEQENAAAAVBqUnwKACJs6daosywrY2rZtW97TAmLGkiVLyNJA1Fm7dq0uvPBCNW7cWJZl6dVXXw143Bije++9V40aNVL16tU1YMAAbd++PeCYX3/9VVdddZUSEhJUp04djRkzhv8vxIAZM2bov//9r44fP65jx47pww8/1IABA8p7WgDK0IMPPijLsjRhwgRn34kTJ5SWlqZ69eqpVq1aGjZsmNLT08tvkgCACiMa1w2CGgBQBtq1a6cff/zR2T766KPynhIAoAI7duyYTj/9dM2ZMyfo4w8//LCeeOIJzZ8/X5999plq1qypgQMH6sSJE84xV111lTZv3qxVq1bp9ddf19q1azVu3LiyegkAgHKwfv16LViwQB07dgzYP3HiRL322mt66aWX9MEHH2jfvn269NJLy2mWAICKIlrXDXpqAECETZ06Va+++qo2bdpU3lMBAEQhy7L0yiuvaOjQoZK8WRqNGzfWrbfeqttuu02SdOjQITVs2FBLlizRFVdcoW+//VYpKSlav369unbtKklauXKlzj//fP3vf/9T48aNy+vlAAAi5OjRo+rcubPmzp2r+++/X506ddLs2bN16NAh1a9fX8uXL9fw4cMlSVu3btVpp52mdevWqUePHuU8cwBAeYjmdYNMDQAoA9u3b1fjxo3VqlUrXXXVVdq9e3d5TwkAEKV27dql/fv3B5QUSkxMVPfu3bVu3TpJ0rp161SnTh0noCFJAwYMkMvl0meffVbmcwYARF5aWpqGDBmSr+Tchg0blJWVFbC/bdu2at68ubNuAABiTzSvGyE1CrdtW/v27VPt2rVlWVak5wQAAYwxOnLkiBo3biyXq3Sx2BMnTigzMzNs88r7NzEuLk5xcXEB+7p3764lS5bo1FNP1Y8//qj77rtPZ599tv7zn/+odu3aYZlLRcO6AaC8RPuaEYr9+/dLkho2bBiwv2HDhs5j+/fvV4MGDQIer1KliurWrescU5GwbgAoL5Vl3Xj++ef15Zdfav369fke279/v6pVq6Y6deoE7PdfN6IN6waA8sK6UTHWjZCCGvv27VOzZs0iPRcAKNSePXvUtGnTEj//xIkTSm5RS/sPeMIyn1q1auVruDplyhRNnTo1YN/gwYOd2x07dlT37t3VokULvfjiixozZkxY5lLRfPMh7QABAABJREFUsG4AKG9hWTOSm2j//l/DMp9Q14xYxboBoLxF87qxZ88e3XLLLVq1apXi4+PDcv6KjnUDQHlj3ShfIQU1fFcS99L5qqKqEZ0QgOj3/aIOYR3P/j1Du296pNRZDZmZmdp/wKNdG1oooXbpoumHj9hK7vKD9uzZo4SEBGd/KFfc1qlTR3/4wx+0Y8eOUs2hIvP9u8r7+wGAYLIeuj5sYx3JyFLy31aEZ83Y/6u+3/W8EhJqlGqsw4ePq2XyFSVaM4JJSkqSJKWnp6tRo0bO/vT0dHXq1Mk55sCBAwHPy87O1q+//uo8vyJh3QBQHPd2fDBsY2XYGZq/59GoXjc2bNigAwcOqHPnzs4+j8ejtWvX6qmnntLbb7+tzMxMHTx4MOCq2/T09Aq5JoSCdQNAcdx86sywjZVpZ+j/DjzGulHOQgpq+FJXqqiqqlgENQAUzlUjMlHecKUVJ9R2lTqo4YyVkFDsN9FHjx7Vzp07dfXVV4dlDhWR799VSX4/AGJPVny1sI8ZtjUjoYYSEmqGaazw/E1MTk5WUlKSVq9e7QQxDh8+rM8++0w33HCDJCk1NVUHDx7Uhg0b1KVLF0nSe++9J9u21b1791LPIdxYNwAUR5wr/J83onnd6N+/v7755puAfaNHj1bbtm115513qlmzZqpatapWr16tYcOGSZK2bdum3bt3KzU1NSxzLWusGwCKoxrrRoDKsG6EFNQAgMrEY2x5TOnHCNVtt92mCy+8UC1atNC+ffs0ZcoUud1ujRgxonSTAABEnm17t9KOUUxHjx4NyOjbtWuXNm3apLp166p58+aaMGGC7r//fp1yyilKTk7WPffco8aNG2vo0KGSpNNOO02DBg3S2LFjNX/+fGVlZemmm27SFVdcocaNG5fu9QAAClYO60bt2rXVvn37gH01a9ZUvXr1nP1jxozRpEmTVLduXSUkJGj8+PFKTU1Vjx49SjdXAEDpsG6UCEENADHHlpGt0kU1ivP8//3vfxoxYoR++eUX1a9fX7169dKnn36q+vXrl2oOAIAyUE5BjS+++EL9+vVz7k+aNEmSNHLkSC1ZskR33HGHjh07pnHjxungwYPq1auXVq5cGVATd9myZbrpppvUv39/uVwuDRs2TE888UTpXgsAoHDltG4U5bHHHnPWgoyMDA0cOFBz584N+3kAAMXEulEiBDUAIMKef/758p4CACDK9O3bV8YUHEC3LEvTpk3TtGnTCjymbt26Wr58eSSmBwCo4N5///2A+/Hx8ZozZ47mzJlTPhMCAFRo0bZuENQAEHNs2SptDLv0IwAAooIx3q20YwAAYgPrBgCgOFg3SoSgBoCY4zFGnlL+wS/t8wEAUcI2YUgHZ80AgJjBugEAKA7WjRJxlfcEAAAAAAAAAAAAQkGmBoCYU9aNwgEAUayCNu4DAFRQrBsAgOJg3SgRghoAYo4tIw9BDQBAKPiQAQAoDtYNAEBxsG6UCOWnAAAAAAAAAABAVCBTA0DMofwUACBkXDkFACgO1g0AQHGwbpQIQQ0AMcdjjDymdEGJ0j4fABAlTBg+ZJjY+5ABADGLdQMAUBysGyVC+SkAAAAAAAAAABAVyNQAEHPsnK20YwAAKj/L2LJKeeVTaZ8PAIgerBsAgOJg3SgZghoAYo5HRp5S9sQo7fMBAFGCGrcAgOJg3QAAFAfrRolQfgoAAAAAAAAAAEQFMjUAxByP8W6lHQMAEANs491KOwYAIDawbgAAioN1o0QIagCIOfTUAACEjHRwAEBxsG4AAIqDdaNECGoAiDm2LHlklXoMAEAM4EMGAKA4WDcAAMXBulEi9NQAAAAAAAAAAABRgUwNADGHcoUAgJAZI5lSXvlkWDQAIGawbgAAioN1o0QIagCIOZ4wlJ8q7fMBAFGCdHAAQHGwbgAAioN1o0QoPwUAAAAAAAAAAKICmRoAYg6ZGgCAkFGzEABQHKwbAIDiYN0oEYIaAGKObSzZpnRBidI+HwAQJUgHBwAUB+sGAKA4WDdKhPJTAAAAAAAAAAAgKpCpASDmUH4KABAyE4Yrp0zsXTkFADGLdQMAUBysGyVCUANAzPHIJU8pE9U8YZoLAKBis2xbVik/ZJT2+QCA6MG6AQAoDtaNkqH8FAAAAAAAAAAAiApkagCIOSYMjcINjcIBIDYY491KOwYAIDawbgAAioN1o0QIagCIOfTUAACEzA5DjdsYTAcHgJjFugEAKA7WjRKh/BQAAAAAAAAAAIgKZGoAiDke45LHlLJReOxl9gFAbOLKKQBAcbBuAACKg3WjRAhqAIg5tizZpUxUs0VUAwBigm28W2nHAADEBtYNAEBxsG6UCOWnAAAAAAAAAABAVCBTA0DMoVE4ACBkpIMDAIqDdQMAUBysGyVCUANAzAlPT43YS+0DgJhkmzB8yGDNAICYwboBACgO1o0SofwUAAAAAAAAAACICmRqAIg53kbhpSsfVdrnAwCihDHerbRjAABiA+sGAKA4WDdKhKAGgJhjyyVPKRPVbMXeggEAMYkatwCA4mDdAAAUB+tGiVB+CgAAAAAAAAAARAWCGgBijq9ReGk3AEAMMCaneV8pthhMBweAmFUO68a8efPUsWNHJSQkKCEhQampqXrrrbecx/v27SvLsgK266+/PtyvHABQEqwbJUL5KQAxx5ZLNuWnAAChIB0cAFAc5bBuNG3aVA8++KBOOeUUGWO0dOlSXXzxxdq4caPatWsnSRo7dqymTZvmPKdGjRqlmyMAIDxYN0qEoAYAAAAAAECUuvDCCwPuP/DAA5o3b54+/fRT58upGjVqKCkpqTymBwCoYCrDukH9FAAxx2OssGwAgBjgu3KqtBsAIDaEcd04fPhwwJaRkVHk6T0ej55//nkdO3ZMqampzv5ly5bp5JNPVvv27XXXXXfp+PHjEfsVAACKgXWjRMjUABBzPHLJU8qYrofyUwAQG3x1aks7BgAgNoRx3WjWrFnA7ilTpmjq1KlBn/LNN98oNTVVJ06cUK1atfTKK68oJSVFknTllVeqRYsWaty4sb7++mvdeeed2rZtm15++eXSzRMAUHqsGyVCUAMAAAAAAKCC2bNnjxISEpz7cXFxBR576qmnatOmTTp06JBWrFihkSNH6oMPPlBKSorGjRvnHNehQwc1atRI/fv3186dO9W6deuIvgYAQNmJpXWDoAaAmGMbl2xTykbhhqtuASAmGNu7lXYMAEBsCOO6kZCQEPDlVGGqVaumNm3aSJK6dOmi9evX6/HHH9eCBQvyHdu9e3dJ0o4dOyrMl1MAELNYN0qEoAaAmEP5KQBAyCg/BQAojgqybti2XWAt9U2bNkmSGjVqVOrzAABKiXWjRAhqAAAAAAAARKm77rpLgwcPVvPmzXXkyBEtX75c77//vt5++23t3LlTy5cv1/nnn6969erp66+/1sSJE9W7d2917NixvKcOACgHlWHdIKgBIObYkjzGKvUYAIAYYNverbRjAABiQzmsGwcOHNA111yjH3/8UYmJierYsaPefvttnXvuudqzZ4/effddzZ49W8eOHVOzZs00bNgw3X333aWbIwAgPFg3SoSgBoCYY8slu5Tlp0r7fABAlKgg6eAAgChRDuvGokWLCnysWbNm+uCDD0o3HwBA5LBulAjfygEAAAAAAAAAgKhApgaAmOMxLnlMKRuFl/L5AIAoYZswpIOTqQEAMYN1AwBQHKwbJUJQA0DMsWXJVml7apTu+QCAKEH5KQBAcbBuAACKg3WjRAhqAIg5ZGoAAEJnS6a0jb5pFA4AsYN1AwBQHKwbJcG3cgAAAAAAAAAAICqQqQEg5njkkqeUMd3SPh8AECVIBwcAFAfrBgCgOFg3SoSgBoCYYxtLtillT41SPh8AECX4kAEAKA7WDQBAcbBulAiXGgMAAAAAAAAAgKhApgaAmGOHofyUTUwYAGKDbXu30o4BAIgNrBsAgOJg3SgRghpABH23vFN5TyEkra7cVN5TKFO2cck2pQxqlPL5ABBM1vRR5T2FkFS9Z0lYx7Nc4SvpF86xJJEODqBCu63ltLCPaUWgyuoju+4N/6AVFesGgArsuib3hX3MSPzFWrh3SljHs034Zhn2P9GsGyXCt3IAAAAAAAAAACAqkKkBIOZ4ZMmj0l2CVtrnAwCiBFdOAQCKg3UDAFAcrBslQlADQMyh/BQAIGTUuAUAFAfrBgCgOFg3SoRv5QAAAAAAAAAAQFQgUwNAzPGo9OWjPOGZCgCgojPGu5V2DABAbGDdAAAUB+tGiRDUABBzKD8FAAgZNW4BAMXBugEAKA7WjRLhWzkAAAAAAAAAABAVCGoAiDke4wrLVlIPPvigLMvShAkTwveiAACR4btyqrRbMXg8Ht1zzz1KTk5W9erV1bp1a02fPl3GL63cGKN7771XjRo1UvXq1TVgwABt37493K8eAFBc5bBuAACiGOtGiVB+CkDMMbJkl7Knhinh89evX68FCxaoY8eOpTo/AKCMGFuy7dKPUQwPPfSQ5s2bp6VLl6pdu3b64osvNHr0aCUmJurmm2+WJD388MN64okntHTpUiUnJ+uee+7RwIEDtWXLFsXHx5duvgCAkiuHdQMAEMVYN0qETA0AKCNHjx7VVVddpaefflonnXRSeU8HAFBBffLJJ7r44os1ZMgQtWzZUsOHD9d5552nzz//XJI3S2P27Nm6++67dfHFF6tjx476+9//rn379unVV18t38kDAAAAQIQR1AAQc8qr/FRaWpqGDBmiAQMGROBVAQAiohzSwXv27KnVq1frv//9ryTpq6++0kcffaTBgwdLknbt2qX9+/cHrCeJiYnq3r271q1bF77XDgAoPsqIAACKg3WjRCg/BSDm2MaSbUpXfsr3/MOHDwfsj4uLU1xcXL7jn3/+eX355Zdav359qc4LAChjtkr/ISEnGzzUNWPy5Mk6fPiw2rZtK7fbLY/HowceeEBXXXWVJGn//v2SpIYNGwY8r2HDhs5jAIByEsZ1AwAQA1g3SoRMDQAohWbNmikxMdHZZs6cme+YPXv26JZbbtGyZcuocw4AMSyUNUOSXnzxRS1btkzLly/Xl19+qaVLl2rWrFlaunRpGc8YAAAAACoeMjUAxByPXPKUMqbre/6ePXuUkJDg7A92xe2GDRt04MABde7cOff5Ho/Wrl2rp556ShkZGXK73aWaDwAgQsKRzp3z/FDWDEm6/fbbNXnyZF1xxRWSpA4dOuiHH37QzJkzNXLkSCUlJUmS0tPT1ahRI+d56enp6tSpU+nmCgAonTCuGwCAGMC6USIENQDEnHCWn0pISAj4giqY/v3765tvvgnYN3r0aLVt21Z33nknAQ0AqMCMbWRK+SHB9/xQ1gxJOn78uFyuwOC72+2WbXvzypOTk5WUlKTVq1c7QYzDhw/rs88+0w033FCquQIASiec6wYAoPJj3SgZghoAEGG1a9dW+/btA/bVrFlT9erVy7cfAIALL7xQDzzwgJo3b6527dpp48aNevTRR/XnP/9ZkmRZliZMmKD7779fp5xyipKTk3XPPfeocePGGjp0aPlOHgAAAAAijKAGgJhjyyW7lOWnSvt8AECUMMa7lXaMYnjyySd1zz336MYbb9SBAwfUuHFjXXfddbr33nudY+644w4dO3ZM48aN08GDB9WrVy+tXLmS3k0AUN7KYd0AAEQx1o0SIagBIOZ4jCVPKctPlfb577//fqmeDwAoI+VQ47Z27dqaPXu2Zs+eXeAxlmVp2rRpmjZtWunmBgAIL2qjAwCKg3WjRLjUGAAAAAAAAAAARAUyNQDEnHA2CgcAVHJcOQUAKA7WDQBAcbBulAhBDQAxxxiXbFO6RDVTyucDAKIEHzIAAMXBugEAKA7WjRLhWzkAAAAAAAAAABAVyNQAEHM8suRRKRuFl/L5AIAowZVTAIDiqCTrxr///e+Qj73ooosiOBMAqOQqybpR1ghqAIg53vWitD01wjQZAECFZoyRKeUffWNYNAAgVlSWdWPo0KEB9y3LCpiXZeV+nvJ4PGU1LQCodCrLulHWKD8FAAAAAAAAh23bzvbOO++oU6dOeuutt3Tw4EEdPHhQb775pjp37qyVK1eW91QBADGITA0AMccOQ6Pw0j4fABAlSAcHABRHJVw3JkyYoPnz56tXr17OvoEDB6pGjRoaN26cvv3223KcHQBEuUq4bpQFvpUDEHNsWWHZAAAxwPcho7QbACA2lMO6MW/ePHXs2FEJCQlKSEhQamqq3nrrLefxEydOKC0tTfXq1VOtWrU0bNgwpaenhzz+zp07VadOnXz7ExMT9f333xdrrgCAPCrJunHGGWeoc+fOIW3hQFADAAAAAAAgSjVt2lQPPvigNmzYoC+++ELnnHOOLr74Ym3evFmSNHHiRL322mt66aWX9MEHH2jfvn269NJLQx6/W7dumjRpUsAXWunp6br99tt15plnhv31AAAiKxLrxtChQ3XxxRfr4osv1sCBA7Vz507FxcWpb9++6tu3r+Lj47Vz504NHDgwLK+B8lMAYo7HWP/P3n3HN1X9fxx/h9GW0QFIKaNQ9t4gmyJUhoMpspQhsmQvBZUNKigylL1RqkwXspEtIDIEZS8ZUhCxQNk09/cH3+ZHLKNtbpsmeT193MeXnCTnfG75kk9zP/eco2gHNwp39P0AABfBdHAAQHw4IW+8/PLLdo9HjRqlKVOmaMeOHcqRI4dmzZql8PBw1axZU5I0Z84cFS5cWDt27FDFihWf2v/s2bPVqFEj5cyZU8HBwZKks2fPKn/+/Pr222/jFSsA4D/cJG8MGTLE9uc333xTPXr00IgRI2K95uzZs/GK9XEoagDwOOypAQCIM8N4cDjaBwDAM5iYN65du2bX7O3tLW9v7ye+NTo6WosXL9aNGzdUqVIl7d69W/fu3VNYWJjtNYUKFVLOnDm1ffv2OBU18uXLp/3792vt2rU6fPiwJKlw4cIKCwuTxcLNXgDgEDfMG4sXL9avv/4aq/21115TuXLlNHv27Lic1RNR1ADgcayyyOrgTAv21AAAz2BYHxyO9gEA8Axm5o2YWRExhgwZoqFDhz7yPQcOHFClSpV0+/ZtpU+fXt98842KFCmiffv2ycvLK9aeGFmyZFFEREScY7JYLKpdu7aqV68ub29vihkAYBJ3zBtp0qTRtm3blD9/frv2bdu2ycfHJ059PA1FDeAhJ8NLmdpfsyK7Te0vsSwML2tqf8dqzDW1v2vXrcpgao8AYI77o9qZ2p8lhWtcIDD7vAHAU/QLGe7sEJyif25zz9tF0qXDzp49Kz8/P9vjJ91tW7BgQe3bt09Xr17VkiVL1KZNG23atMmUOKxWq0aNGqWpU6fq4sWLOnr0qPLkyaNBgwYpJCRE7du3N2UcALF1zD7M2SE8lTURZiW/mW2oqf2ZuRpscl5ZNrnkjV69eqlLly7as2ePbe+lnTt3avbs2Ro0aJApY1DUAOBxDFkcnmlhMFMDADwDe2oAAOLDxLzh5+dnd3HqSby8vJQvXz5JUtmyZbVr1y5NmDBBzZo10927dxUZGWl31+3FixcVFBQUp75HjhypefPmacyYMerQoYOtvVixYho/fjxFDQBwhBvmjQEDBihPnjyaMGGCvvzyS0kPli2cM2eOXn311Xic2OOxKDwAj2M1LKYcAAAPEPMlw9EDAOAZkknesFqtunPnjsqWLavUqVNr/fr1tueOHDmiM2fOqFKlSnHqa/78+Zo+fbpatWqllClT2tpLlixp22MDAJBAbpg3JOnVV1/Vtm3bdOXKFV25ckXbtm0zraAhMVMDAAAAAADAZQ0cOFD16tVTzpw5df36dYWHh2vjxo1avXq1/P391b59e/Xp00cZM2aUn5+funfvrkqVKsVps1dJOn/+vO1u3odZrVbdu3fP7NMBACSyxM4bkhQZGaklS5bo5MmT6tevnzJmzKg9e/YoS5Ysyp49u8PnQFEDgMexGilkNRybqObo+wEAroGNwgEA8eGMvHHp0iW1bt1aFy5ckL+/v0qUKKHVq1fr+eeflySNGzdOKVKkUJMmTXTnzh3VqVNHkydPjnP/RYoU0ZYtW5QrVy679iVLlqh06dLxCxYAYMcd88b+/fsVFhYmf39/nT59Wm+++aYyZsyoZcuW6cyZM5o/f378An4EihoAPI4Zy0ex/BQAeAjDhOncibB5IgAgmXJC3pg1a9YTn/fx8dGkSZM0adKkBIUzePBgtWnTRufPn5fVatWyZct05MgRzZ8/X8uXL09QnwCA/3HDvNGnTx+1bdtWY8aMka+vr639hRdeUMuWLRPU539R1AAAAACgiRMnxvm1PXr0SMRIAADJSYMGDfTDDz9o+PDhSpcunQYPHqwyZcrohx9+sN3VCwBAjF27dmnatGmx2rNnz66IiAhTxqCoAcDjWGWRVQ7O1HDw/QAAF2H93+FoHy5g3Lhxdo///vtv3bx5UwEBAZIerIubNm1aBQYGUtQAgMdx07xRrVo1rV271tlhAID7ccO84e3trWvXrsVqP3r0qDJnzmzKGCwKD8DjxCw/5egBAHB/htUw5XAFp06dsh2jRo1SqVKldOjQIV25ckVXrlzRoUOHVKZMGY0YMcLZoQJAsuWOeePNN9/Uxo0bnR0GALgld8wb9evX1/Dhw3Xv3j1JksVi0ZkzZ/TOO++oSZMmpoxBUQMAAACAnUGDBumzzz5TwYIFbW0FCxbUuHHj9P777zsxMgBAUvv7779Vt25dBQcHq3///tq3b5+zQwIAJGNjx45VVFSUAgMDdevWLYWGhipfvnzy9fXVqFGjTBmD5acAeBw2CgcAxJkbTgePiwsXLuj+/fux2qOjo3Xx4kUnRAQALsIN88Z3332nf//9V4sXL1Z4eLg+/fRTFSpUSK1atVLLli0VEhLi7BABwHW5Yd7w9/fX2rVrtXXrVu3fv19RUVEqU6aMwsLCTBuDogYAj0NRAwAQZ8b/Dkf7cDG1atVSp06dNHPmTJUpU0aStHv3bnXp0sXULyMA4HbcNG9kyJBBHTt2VMeOHXXu3Dl99dVXmj17tgYPHvzIIjgAII7cMG+cPXtWwcHBqlq1qqpWrZooY7D8FAAAAAA7s2fPVlBQkMqVKydvb295e3vr2WefVZYsWTRz5kxnhwcAcJJ79+7p119/1c6dO3X69GllyZLF2SEBAJKZkJAQhYaGasaMGfr3338TZQxmagDwOMzUAADElRkb7yW3jfviInPmzFqxYoWOHj2qw4cPS5IKFSqkAgUKODkyAEje3DVvbNiwQeHh4Vq6dKmsVqsaN26s5cuXq2bNms4ODQBcmjvmjV9//VXh4eEaPny4unfvrrp16+q1117Tyy+/LG9vb1PGoKgBwOMYkqxyrCiRvNIFACDRuOEat/EREhIiwzCUN29epUrFVwcAeCo3zBvZs2fXlStXVLduXU2fPt3Ui1IA4PHcMG+ULl1apUuX1pgxY7Rx40aFh4erY8eOtqL47NmzHR6D5acAAAAA2Ll586bat2+vtGnTqmjRojpz5owkqXv37vroo4+cHB0AICkNHTpUFy5c0DfffKNXXnmFggYAIE4sFouee+45zZgxQ+vWrVPu3Lk1b948U/qmqAHA48QsP+XoAQBwf4bVnMPVDBw4UL/99ps2btwoHx8fW3tYWJgWLlzoxMgAIHlzt7xx7949denSRefOnXN2KADgltwtbzzs3LlzGjNmjEqVKqVnn31W6dOn16RJk0zpmznkADwOe2oAAOLMDaeDx8W3336rhQsXqmLFirJY/j/nFS1aVCdOnHBiZACQzLlZ3kidOrVy5syp6OhoZ4cCAO7JzfKGJE2bNk3h4eHatm2bChUqpFatWum7775Trly5TBuDmRoAAAAA7Pz9998KDAyM1X7jxg27IgcAwP299957evfdd3XlyhVnhwIAcAEjR45UhQoVtHv3bv3+++8aOHCgqQUNiZkaADwQMzUAAHFlxnTu5Dod/EnKlSunH3/8Ud27d5ckWyFj5syZqlSpkjNDA4BkzR3zxueff67jx48rW7ZsypUrl9KlS2f3/J49e5wUGQC4PnfLG/fv39cbb7yhDh06KEeOHIk2DkUNAB6HogYAIM4MOT6d2zAjkKT1wQcfqF69ejp48KDu37+vCRMm6ODBg/r555+1adMmZ4cHAMmXG+aNhg0bOjsEAHBfbpY3UqVKpU8//VTt2rVL3HEStXcAAAAALqdq1arat2+fPvroIxUvXlxr1qxRmTJltH37dhUvXtzZ4QEAktCQIUOcHQIAwIXUrFlTmzZtUkhISKKNQVEDgMcxDIsMB2daOPp+AIBrMIwHh6N9uKK8efNqxowZzg4DAFyKu+aNyMhILVmyRCdOnFD//v2VMWNG7dmzR1myZFH27NmdHR4AuCx3zBv16tXTgAEDdODAAZUtWzbWsoX169d3eAyKGgA8jlUWWeXg8lMOvh8A4BrcbY3buAoLC9Nrr72mxo0by8/Pz9nhAIDLcMe8sX//foWFhcnf31+nT59Whw4dlDFjRi1btkxnzpzR/PnznR0iALgsd8wbb731liTp008/jfWcxWJRdHS0w2OkcLgHAAAAAG6laNGiGjhwoIKCgtS0aVN99913unfvnrPDAgA4QZ8+fdS2bVsdO3ZMPj4+tvYXXnhBmzdvdmJkAIDkyGq1PvYwo6AhUdQA4IFiNgp39AAAeACrSYeLmTBhgs6fP69vv/1W6dKlU+vWrZUlSxZ17NiRjcIB4EncMG/s2rVLnTp1itWePXt2RUREOCEiAHAjbpg3Hnb79u1E6ZeiBgCPE7OnhqMHAMD9xUwHd/RwRSlSpFDt2rU1d+5cXbx4UdOmTdMvv/yimjVrOjs0AEi23DFveHt769q1a7Hajx49qsyZMzshIgBwH+6YN6KjozVixAhlz55d6dOn18mTJyVJgwYN0qxZs0wZg6IGAAAAgMeKiIjQ1KlTNXr0aO3fv1/ly5d3dkgAgCRUv359DR8+3LYMocVi0ZkzZ/TOO++oSZMmTo4OAJDcjBo1SnPnztWYMWPk5eVlay9WrJhmzpxpyhgUNQB4HJafAgDElWGYc7iaa9euac6cOXr++ecVHBysKVOmqH79+jp27Jh27Njh7PAAINlyx7wxduxYRUVFKTAwULdu3VJoaKjy5csnX19fjRo1ytnhAYBLc8e8MX/+fE2fPl2tWrVSypQpbe0lS5bU4cOHTRkjlSm9AIALMWP5KJafAgAPYbU8OBztw8VkyZJFGTJkULNmzfThhx+qXLlyzg4JAFyDG+YNf39/rV27Vtu2bdNvv/2mqKgolSlTRmFhYc4ODQBcnxvmjfPnzytfvnyx2q1Wq23Wn6MoagAAAACwMQxDEydOVKtWrZQ2bVpnhwMASCaqVKmiKlWqSJIiIyOdGwwAINkqUqSItmzZoly5ctm1L1myRKVLlzZlDIoaSBLl90Wb3ufIwAOm9yntM7W39y8VN7U/SVp4sKzpfZot/8a2pvZnvXlb0kjT+jNMWD6KmRpA4ro/qp2zQwAkmbPxXnLbuO9pDMNQ165dVaNGDeXPn9/Z4QBx0idkuLNDiBPWf3Z/7pg3Ro8erZCQEDVr1kyS9Oqrr2rp0qUKCgrSihUrVLJkSSdHCMRfp+zDTO8zma0A9EjW5LZO0WNYXSNMU7hj3hg8eLDatGmj8+fPy2q1atmyZTpy5Ijmz5+v5cuXmzIGv1MB8DiGTFiv0NknAQBIEjFLFjp6uJIUKVIof/78+ueff5wdCgC4HHfMG1OnTlVwcLAkae3atVq7dq1WrlypevXqqX///k6ODgBcmzvmjQYNGuiHH37QunXrlC5dOg0ePFiHDh3SDz/8oOeff96UMZipAcDjWGWRRY594FsdfD8AwDW4451TcfHRRx+pf//+mjJliooVK+bscADAZbhj3oiIiLAVNZYvX65XX31VtWvXVkhIiCpUqODk6ADAtblj3pCkatWqae3atYnWPzM1AAAAANhp3bq1fvnlF5UsWVJp0qRRxowZ7Q4AgOfIkCGDzp49K0latWqVbYNwwzAUHW3+UtMAANd29uxZnTt3zvb4l19+Ua9evTR9+nTTxmCmBgCPY8bUvOQ2tQ8AkDgMw4Q7p1xwzcLx48c7OwQAcEnumDcaN26sli1b2pYmrFevniRp7969ypcvn5OjAwDX5o55o2XLlurYsaNef/11RUREKCwsTMWKFdOCBQsUERGhwYMHOzwGRQ0AHsdqWGRxsCjh6EbjAADX4KmF8DZt2jg7BABwSe6YN8aNG6eQkBCdPXtWY8aMUfr06SVJFy5c0FtvveXk6ADAtblj3vj999/17LPPSpIWLVqk4sWLa9u2bVqzZo06d+5MUQMAAABA4jhx4oTmzJmjEydOaMKECQoMDNTKlSuVM2dOFS1a1NnhAQCSSOrUqdWvX79Y7b1793ZCNACA5O7evXvy9vaWJK1bt07169eXJBUqVEgXLlwwZQz21ADgcQzDnAMA4AGsFhkOHrImrzun4mLTpk0qXry4du7cqWXLlikqKkqS9Ntvv2nIkCFOjg4AkjE3zRtHjhxRt27dVKtWLdWqVUvdunXTkSNHnB0WALg+N8wbRYsW1dSpU7VlyxatXbtWdevWlST99ddfypQpkyljUNQA4HFipvY5egAA3J+nFsIHDBigkSNHau3atfLy8rK116xZUzt27HBiZACQvLlj3li6dKmKFSum3bt3q2TJkipZsqT27NmjYsWKaenSpc4ODwBcmjvmjdGjR2vatGmqUaOGWrRooZIlS0qSvv/+e9uyVI5i+SkAAAAAdg4cOKDw8PBY7YGBgbp8+bITIgIAOMvbb7+tgQMHavjw4XbtQ4YM0dtvv60mTZo4KTIAQHJUo0YNXb58WdeuXVOGDBls7R07dlTatGlNGYOiBgCP446bMAEAEoen5oyAgABduHBBuXPntmvfu3evsmfP7qSoACD5c8e8ceHCBbVu3TpW+2uvvaaPP/7YCREBgPtwx7whSSlTptS9e/e0ZcsWSVLBggUVEhJiWv8sPwXA41gNiykHAMD9Obq+rW2dWxfTvHlzvfPOO4qIiJDFYpHVatW2bdvUr1+/R17YAgA84Iy88eGHH6p8+fLy9fVVYGCgGjZsGGu/ixo1ashisdgdnTt3jlP/NWrUsF2UetjWrVtVrVq1eMUKALDnjnnj+vXrev3115U9e3aFhoYqNDRU2bNn12uvvaarV6/GK9bHYaYGAAAAADsffPCBunbtquDgYEVHR6tIkSKKjo5Wy5Yt9f777zs7PADAQzZt2qSuXbuqfPnyun//vt59913Vrl1bBw8eVLp06Wyv69Chg90SUk9aAuT777+3/bl+/fp65513tHv3blWsWFGStGPHDi1evFjDhg1LhDMCACSmxMgbD3vzzTe1d+9eLV++XJUqVZIkbd++XT179lSnTp309ddfO3wOFDUAeBwzNlFKbpswAQASh6fmDC8vL82YMUODBw/WgQMHFBUVpdKlSyt//vzODg0AkjVn5I1Vq1bZPZ47d64CAwO1e/duVa9e3daeNm1aBQUFxanPhg0bxmqbPHmyJk+ebNfWtWvXON+5CwCIzV3yxsOWL1+u1atXq2rVqra2OnXqaMaMGapbt268+3sUlp8C4HEeJAyLg4ezzwIAkBQczxeOr5HrTMHBwXrhhRfUpEkT3bhxQ//++6+zQwKAZC055I2YpT0yZsxo175gwQI988wzKlasmAYOHKibN28+tg+r1RqnIzo62qFYAcDTuUveeFimTJnk7+8fq93f399u43BHMFMDAAAAgJ1evXqpePHiat++vaKjoxUaGqqff/5ZadOm1fLly1WjRg1nhwgAbu/atWt2j729veXt7f3E91itVvXq1UtVqlRRsWLFbO0tW7ZUrly5lC1bNu3fv1/vvPOOjhw5omXLliVK7ACApJdc8sb777+vPn366IsvvrDN9IiIiFD//v01aNCgBJxZbBQ1AHgcM6rYrnzXLQAg7qxWi6wObvTt6PudYcmSJXrttdckST/88INOnjypw4cP64svvtB7772nbdu2OTlCAEiezMwbwcHBdu1DhgzR0KFDn/jerl276vfff9fWrVvt2jt27Gj7c/HixZU1a1bVqlVLJ06cUN68eZ8a06ZNm/TJJ5/o0KFDkqQiRYqof//+bBQOAA5yl7xRunRpWSz/fx7Hjh1Tzpw5lTNnTknSmTNn5O3trb///ludOnWK1/k9CkUNAB7H+N/haB8AAPfnqXtqXL582XZX1YoVK/Tqq6+qQIECeuONNzRhwgQnRwcAyZeZeePs2bPy8/OztT/tbttu3bpp+fLl2rx5s3LkyPHE11aoUEGSdPz48acWNb788ku1a9dOjRs3Vo8ePSRJ27ZtU61atTR37ly1bNnyaacEAHgMd8kb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JCREly5d0tq1a3XmzBmFhIRo/Pjx6t69u90U5CxZstj18dZbbylz5swaPHiwbty4IenBh96wYcMUFhamLl266MiRI5oyZYp27dqlbdu2KXXq1Lb3//vvv6pbt64aN26sV199VUuWLNE777yj4sWL25bMunXrlmrUqKHjx4+rW7duyp07txYvXqy2bdsqMjJSPXv2tItpwYIFunv3rrp3764rV65ozJgxevXVV1WzZk1t3LhR77zzjo4fP67PPvtM/fr1e+IHanR0tF566SWtX79ezZs3V8+ePXX9+nWtXbtWv//+u/LmzStJmjBhgurXr69WrVrp7t27+vrrr9W0aVMtX75cL7744lP/zswya9YsderUSZUrV1avXr108uRJ1a9fXxkzZlRwcLDtdVarVfXr19fWrVvVsWNHFS5cWAcOHNC4ceN09OhRffvtt0kWM+DO3DXfrFy5UtHR0WrduvVjX9O6dWtt2LBBq1at0ptvvmlr37RpkxYuXKgePXrI29tbkydPVt26dfXLL7/Y1gd+WrzxOfcYTZs2Vf78+fXBBx/IMAy99NJLevvtt7Vo0SLbhbQYixYtUu3atW13esV1rAMHDqh27drKnDmzhg4dqvv372vIkCGxcqfZIiIi9Nxzz+n+/fsaMGCA0qVLp+nTpytNmjSxXvvFF1+oTZs2qlOnjkaPHq2bN29qypQpqlq1qvbu3RuvJWcAT3T16lVdvnw5Vntc9hE6f/687QLOwIEDlS5dOs2cOfOxd9geP35cr7zyitq3b682bdpo9uzZatu2rcqWLWvLCzdv3lRoaKjOnz+vTp06KWfOnPr55581cOBAXbhwwbZX0tq1a9WiRQvVqlVLo0ePliQdOnRI27ZtU8+ePVW9enX16NFDEydO1LvvvqvChQtLku1/H+fOnTtaunSp+vbtK0lq0aKF2rVrp4iICLsi/IwZM9SjRw+98sor6tmzp27fvq39+/dr586datmypRo3bqyjR4/GWv4ic+bMtj5++uknLVq0SN26ddMzzzxjuwHraXn2Yd27d1eGDBk0ZMgQnT59WuPHj1e3bt20cOFC22vi+13mpZdeUvPmzdW0aVNNmTJFzZs314IFC9SrVy917txZLVu21Mcff6xXXnlFZ8+efeLSXHPnztUbb7yhokWLauDAgQoICNDevXu1atUq23e5xYsX6+bN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Bg8erO+//z5Wf1evXn3ie81E7gESF/nmgbh874h5/r/fO1KkSBHr+05MXorZVyQu8cb13GM86nvHM888o1q1amnRokUaMWKEpAfX71KlSqXGjRvHe6w///xTWbNmjbVk8KNyopn+/PNPpUiRwrYU++PG/fvvvxUZGanp06dr+vTpj+yL604wk0cUNeIjW7Zsyp07tzZv3qyQkBAZhqFKlSopc+bM6tmzp/78809t2bJFlStXtl1wj7kz9OOPP7arij8s5kPn1VdfVbVq1fTNN99ozZo1+vjjjzV69GgtW7bMtp9EfMXcFfW4LwgnT560faj36tVLL7/8sr799lutXr1agwYN0ocffqiffvpJpUuXjtN4j1ozNT4enuXxMOM/GzeZ0WdijCU9uNBYv359Va9eXZMnT1bWrFmVOnVqzZkzx25Tv+TEarWqePHi+vTTTx/5/H+/iAFIXK6Wb2KKyvv373/s2DHF6Yfvqo2rp8Ubn3OP8ah8lS1bNlWrVk2LFi3Su+++qx07dujMmTO29XSluP+cHy5oJ1cx5/LFF1888gaGpxXwASStuPzuarVa9fzzz+vtt99+5GtjLt4EBgZq3759Wr16tVauXKmVK1dqzpw5at26tebNm5eg+BYvXqw7d+5o7NixGjt2bKznFyxYYNsUtXDhwjpy5IiWL1+uVatWaenSpZo8ebIGDx78yI1TH8XR7x2S+d8Hkvp7R3R0tJ5//nlduXJF77zzjgoVKqR06dLp/Pnzatu27WM36XYmcg+Q/CXnfJMvXz6lSpXK7sbX/7pz546OHDnyyCLQ08Ql3riee4zH5avmzZurXbt22rdvn0qVKqVFixapVq1atn2kEjJWchXz2f/aa6899uawuMw6AuLKI36byJw5s9KmTWtb4uNhhw8fVooUKewu6FarVk2bN29W7ty5VapUKfn6+qpkyZLy9/fXqlWrtGfPHrtfxGOqlX5+fgoLC3tqPFmzZtVbb72lt956S5cuXVKZMmU0atQo20Wm+Nzpf+rUKf3888/q1q2bQkND7Z6zWq16/fXXFR4ervfff98u3r59+6pv3746duyYSpUqpbFjx+rLL7+M9/iSlCtXLknSkSNH7Crid+/e1alTp+L0M3lUn/v375fVarWbrXH48GG7MRND3rx5tXPnTt27d89uU8CHLV26VD4+Plq9erXdxltz5sxJtLgeJebncOzYMbs7oe7du6dTp07Z7u6WHpzXb7/9plq1aiXpbBLAk7hzvqlXr55SpkypL7744rGbhc+fP1+pUqWKdVdWzB2bDzt69KjSpk1rd0fSk+KN77k/SbNmzfTWW2/pyJEjWrhwodKmTauXX37Z9nxcx8qcObPSpEnzyPN71P8HzJQrV644jRtzLoGBgQ7/3ADEX65cuexmNMR4VFtc5c2bV1FRUXH6N+3l5aWXX35ZL7/8sqxWq9566y1NmzZNgwYNUr58+eL9O+GCBQtUrFixWJueStK0adMUHh5ul7fSpUunZs2aqVmzZrp7964aN26sUaNGaeDAgfLx8Yn3+PHNs3GRGN9l4irmM/r3339/7N3UBw4c0NGjRzVv3jy7/Gv2smJxQe4Bki93yjfp0qXTc889p59++kl//vnnI6//LFq0SHfu3NFLL71k1261WnXy5Em7QsDRo0clSSEhIXGONz7n/iQNGzZUp06dbEtQHT16VAMHDrR7TVzHypUrl9avX6+oqCi7m7mS4nuH1Wq1rWryuHEzZ84sX19fRUdH89mPJOERe2qkTJlStWvX1nfffWebbiZJFy9eVHh4uKpWrWo3BbZatWo6ffq0Fi5caFseJEWKFKpcubI+/fRT3bt3z27twbJlyypv3rz65JNPFBUVFWv8v//+W9KDu2z+Oz04MDBQ2bJls7vbM126dHGeRhwzS+Ptt9/WK6+8Yne8+uqrCg0Ntb3m5s2bun37tt378+bNK19f31jjR0ZGxml8SQoLC5OXl5cmTpxoV9WfNWuWrl69qhdffDHOfcV44YUXFBERYbf24P379/XZZ58pffr0sQo4ZmrSpIkuX76szz//PNZzMeeXMmVKWSwW21rw0oOpjN9++22ixfUo5cqVU+bMmTV16lTdvXvX1j537txYf4evvvqqzp8/rxkzZsTq59atW7px40Zihwu4PXfON8HBwf/H3p3HWV3X+wN/H7ZhHUgFxUAUrBTccUkUcUkRt8zUrHsV1MyS3NP0drtqqWh6c00Tc+na5m71S3Elt9QksbTS1EC5kmiSgEuoM5/fH8RcRwY433POMOc73+fz8fg+iu+c8zmfcziclzOv+Xy+ceihh8Y999wTl19++TJf//73vx/33XdfHH744TFkyJBWX3vkkUda7Z86Z86c+PnPfx677bZbdO3ataz5lvvcy/HZz342unbtGj/96U/jxhtvjL322iv69OnT8vVyH6tr164xfvz4uO222+Kll15q+fqf//znuPPOO8ueTyX22GOPePTRR+O3v/1tq3l9eE/78ePHR2NjY5x99tnx3nvvLTNOltcNyG78+PHxyCOPxJNPPtlybv78+cv8W83iwAMPjEceeaTNz5k33ngj3n///YhYct29D+rSpUvLb0gu/Wxd+tlXzn/7z5kzJx544IE48MADl/m+Y//9949DDz00nn/++XjsscfafPwePXrEyJEjI6XU8nmU5fEjsudsOdrje5ly7bbbbtGvX7+YMmXKMt+nffD7jg/+een/v+iii9ptXssje6B+daa8iYj4z//8z0gpxaRJk+Kdd95p9bVZs2bFySefHIMHD44jjzxymft+8Gc5KaW49NJLo3v37rHLLruUPd9yn/vKDBgwIMaPHx833HBD/OxnP4sePXrEvvvu2+o25T7WHnvsEe+//36r78WamprikksuKWsulVr6C3EXX3xxq/MXXnhhqz937do1PvvZz8bNN98cTz/99DLj+Oyn1jrVSo2rr746pk2btsz5Y489Ns4888y4++67Y/vtt4+jjjoqunXrFldccUUsXrw4vvOd77S6/dIfID377LNx9tlnt5zfYYcd4o477oiGhobYaqutWs536dIlfvCDH8SECRNi1KhRceihh8ZHP/rRePnll2P69OnR2NgYv/zlL2PRokUxZMiQ2H///WPTTTeNvn37xj333BOPP/54q+Xbo0ePjuuvvz5OOOGE2GqrraJv376tfoP0g3784x/HZpttttzfSNpnn33i6KOPjieeeCK6dOkSu+yySxx44IExcuTI6NatW9x6660xb968Vhe7Gz16dFx++eVx5plnxvrrrx+DBg1a7n6oEUva2FNPPTXOOOOM2H333WOfffaJZ599Ni677LLYaqutWl0UvFxf+tKX4oorrohJkybF7373u1h33XXjpptuiocffjguvPDClV4wqhqHHHJI/M///E+ccMIJ8dvf/jbGjh0bb731Vtxzzz1x1FFHxac//enYc88947vf/W7svvvu8YUvfCFeffXV+N73vhfrr7/+CpdI1lr37t3jzDPPjCOPPDJ23nnn+NznPhezZs2Ka665Zpl9JA8++OC44YYb4stf/nJMnz49tttuu2hqaopnnnkmbrjhhrjzzjsrWroJRVTEvImIuOCCC+KZZ56Jo446KqZNm9ayIuPOO++Mn//85zFu3Lg2tyPZaKONYvz48XHMMcdEQ0NDXHbZZRERLb/NW858y33u5Rg0aFDstNNO8d3vfjcWLVrU6kJ9WR/rjDPOiGnTpsXYsWPjqKOOaingR40a1a55cPLJJ8d1110Xu+++exx77LHRp0+fmDp1astKx6UaGxvj8ssvj4MPPji22GKLOOigg2LgwIHx0ksvxa9+9avYbrvt2izxgdo4+eST40c/+lHsuuuucfTRR0efPn3iBz/4Qayzzjoxf/78ilbPnnTSSfGLX/wi9tprr5g0aVKMHj063nrrrXjqqafipptuitmzZ8caa6wRX/ziF2P+/Pmx8847x5AhQ+LFF1+MSy65JDbbbLOWLQU322yz6Nq1a5x77rmxYMGCaGhoiJ133jkGDRq0zOP+5Cc/iZRS7LPPPm3Oa4899ohu3brFj3/849hmm21it912i7XWWiu22267WHPNNePPf/5zXHrppbHnnnu2/Lf86NGjIyLiG9/4Rhx00EHRvXv32HvvvVsVzR+WJWfL0R7fy5SrsbExLrjggvjiF78YW221VXzhC1+Ij3zkI/H73/8+3n777fjhD38YG2ywQYwYMSK+9rWvxcsvvxyNjY1x8803r/BaHe1F9kD96kx5E7Hk+6Hzzz8/TjjhhNhkk01i0qRJMXjw4HjmmWfiyiuvjObm5rj99ttbXU8vIqJnz54xbdq0mDhxYmyzzTZxxx13xK9+9av4j//4j5YV4uXMt9znXo7Pfe5z8e///u9x2WWXxfjx42PAgAEVvc577713bLfddnHKKafE7NmzY+TIkXHLLbe0+7WVNttss/j85z8fl112WSxYsCDGjBkT9957b5urgM4555yYPn16bLPNNnHEEUfEyJEjY/78+fHEE0/EPffcE/Pnz2/XuVIwqRO45pprUkQs95gzZ05KKaUnnngijR8/PvXt2zf17t077bTTTuk3v/lNm2MOGjQoRUSaN29ey7mHHnooRUQaO3Zsm/eZOXNm2m+//dLqq6+eGhoa0rBhw9KBBx6Y7r333pRSSosXL04nnXRS2nTTTVO/fv1Snz590qabbpouu+yyVuO8+eab6Qtf+EIaMGBAiog0bNiwNh/vd7/7XYqI9M1vfnO5r83s2bNTRKTjjz8+/f3vf0+TJ09OG2ywQerTp0/q379/2mabbdINN9zQ6j6vvPJK2nPPPVO/fv1SRKRx48a1ep0ff/zxNh/r0ksvTRtssEHq3r17WnPNNdNXvvKV9I9//KPVbcaNG5dGjRq1zH0nTpy4zPOcN29eOvTQQ9Maa6yRevTokTbeeON0zTXXtLrNrFmzUkSk8847r9X56dOnp4hIN954Y6vzbT2HcePGtTzHpd5+++30jW98I6233nqpe/fuaa211kr7779/euGFF1puc9VVV6WPfexjqaGhIW2wwQbpmmuuSaeddlr68D+rYcOGpYkTJ7bxirXt8ccfTxGxzHP94POaPn16q/OXXXZZWm+99VJDQ0Pacsst0wMPPNDm83r33XfTueeem0aNGpUaGhrSRz7ykTR69Oh0xhlnpAULFpQ9RyiqoubNBy1evDhdcMEFafTo0alPnz6pd+/eaYsttkgXXnhhevfdd5e5fUSkyZMnpx/96Ectn5mbb755q8+xcudbznNPKbV8Fr/22mvLfR5XXnlliojUr1+/9M4777R5m3IeK6WU7r///jR69OjUo0ePNHz48PT973+/zTxYmVGjRi3zub1UW1nyhz/8IY0bNy717NkzffSjH03f/va301VXXZUiIs2aNavVbadPn57Gjx+f+vfvn3r27JlGjBiRJk2alGbMmJFpjlAkK/tv37b+u7atf6szZ85MY8eOTQ0NDWnIkCFpypQp6eKLL04RkV555ZVW991zzz3bfJwPfzYsWrQonXrqqWn99ddPPXr0SGussUYaM2ZMOv/881s+i2+66aa02267pUGDBqUePXqkddZZJx155JHpb3/7W6uxrrzyyjR8+PDUtWvXNv87c6mNN944rbPOOm1+bakdd9wxDRo0KL333nvpiiuuSDvssEPLZ+iIESPSSSedtMx/c377299OH/3oR1OXLl1afX4tzY+2lJOzy/v7W95/T1fzvczy/u4+/ByWzunDn9G/+MUv0pgxY1KvXr1SY2Nj2nrrrdNPf/rTlq//6U9/Sp/61KdS37590xprrJGOOOKI9Pvf/36Z7xlkD+STvFm+Bx54IH36059Oa6yxRurevXtaZ5110hFHHJFmz569zG0nTpyY+vTpk1544YW02267pd69e6c111wznXbaaampqanlduXOt5znvryfSX3QwoULU69evVJEpB/96Edt3qacx0oppddffz0dfPDBqbGxMfXv3z8dfPDBaebMmcv9GdLynHfeeW1+bqfUdpa888476Zhjjkmrr7566tOnT9p7773TnDlzUkSk0047rdVt582blyZPnpyGDh3a8vO0XXbZJU2dOrXs+UE5SilVeeUyAAAAynbcccfFFVdcEW+++eZyL9YKANWSN0BnVYhragAAAHSED+8F/vrrr8d1110X22+/vR8wAVAz8gYokk51TQ0AAIB6su2228aOO+4YG264YcybNy+uuuqqWLhwYXzzm9/s6KkB0InIG6BIlBoAAADtZI899oibbroppk6dGqVSKbbYYou46qqrYocddujoqQHQicgboEhcUwMAAAAAAMgF19QAAAAAAAByQakBAAAAAADkQlnX1Ghubo65c+dGv379olQqtfecAFpJKcWiRYti7bXXji5dquti//nPf8a7775bk3n16NEjevbsWZOxOhu5AXQUmZFPcgPoKHIjn+QG0FHkRn0oq9SYO3duDB06tL3nArBCc+bMiSFDhlR8/3/+85+x3rC+8cqrTTWZz1prrRWzZs0qVGiUS24AHU1m5IvcADqa3MgXuQF0NLnRscoqNfr16xcRS/6yGhsb23VCQP59uv8hNR3v/XgvHorbWz6LKvXuu+/GK682xYu/Wzca+1XXpi9c1BzDRs+Od999tzCBkYXcALLYb5tv1Wys95sWx/3PXSozckZuAFk0z9u8ZmMtfLM5hm0xW27kjNwAsvjZCzvXbKx33myK43Z4Um50sLJKjaVL+RobG4UFsFLdSt1rO2Ba8j+1Wlbct18p+varbqzmsMR5ReQGkEW3rg01H1Nm5IvcALJofrv2lweVG/kiN4AsevUt60fgmciNjlX7v1GAOteUmqMpVT8GAJ2fzAAgC7kBQBZyozK1//UGAAAAAACAdmClBlA4zZGiOaqrwau9PwD5IDMAyEJuAJCF3KiMUgMonOZojmoX5lU/AgB5IDMAyEJuAJCF3KiM7acAAAAAAIBcsFIDKJymlKIpVbc0r9r7A5APMgOALOQGAFnIjcooNYDCsV8hAOWSGQBkITcAyEJuVMb2UwAAAAAAQC5YqQEUTnOkaNKCA1AGmQFAFnIDgCzkRmWUGkDhWNoHQLlkBgBZyA0AspAblbH9FAAAAAAAkAtWagCF05RSNKXqWuxq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nHHGGdG/f/+Wr/Xo0SPWXXfd2HbbbSsaW6kBAAAFtHDhwkgpRUopFi1aFD179mz5WlNTU9x+++0xaNCgDpwhAACQVxMnToyIiPXWWy/GjBkT3bt3r9nYSg2gcEppyVHtGAB0fp05MwYMGBClUqllOfiHlUqlii/cB1BUnTk3AKi9IuTGuHHjoqmpKW6++eb485//HBERo0aNin322Se6du1a0ZhKDaB4arHfYJ0HBgA10okzY/r06ZFSip133jluvvnmVhfp69GjRwwbNizWXnvtDpwhQA514twAoB0UIDeef/752GOPPeLll1+OT3ziExERMWXKlBg6dGj86le/ihEjRmQeU6kBAAAFNG7cuIiImDVrVgwdOjS6dOnSwTMCAAA6m2OOOSZGjBgRjz76aMsvUr3++uvx7//+73HMMcfEr371q8xjKjWA4unEF2ECoMYKkBnDhg2LN954I6666qpWy8EPO+ywVhfzA6AMBcgNAGqoALlx//33tyo0IiJWX331OOecc2K77baraEy/jgUUT6rRAUDnV4DMmDFjRowYMSIuuOCCmD9/fsyfPz+++93vxogRI+KJJ57o6OkB5EsBcgOAGipAbjQ0NMSiRYuWOf/mm29Gjx49KhpTqQGwinzve9+LddddN3r27BnbbLNN/Pa3v+3oKQFQx1ZVbhx//PGxzz77xOzZs+OWW26JW265JWbNmhV77bVXHHfcce3ymADUnu83AMhiVeXGXnvtFV/60pfisccei5RSpJTi0UcfjS9/+cuxzz77VDSmUgMong5owa+//vo44YQT4rTTTosnnngiNt100xg/fny8+uqrNXlKALSTDvrNqVWZGzNmzIivf/3r0a3b/+1M261btzj55JNjxowZNX88gE6tALkBQA0VIDcuvvjiGDFiRGy77bbRs2fP6NmzZ2y33Xax/vrrx0UXXVTRmEoNoHg6IDC++93vxhFHHBGHHnpojBw5Mr7//e9H79694+qrr67JUwKgnXTQNxmrMjcaGxvjpZdeWub8nDlzol+/fjV/PIBOrQC5AUANFSA3BgwYED//+c/j2WefjZtuuiluuummePbZZ+PWW2+t+Bp+Sg2geJZehKnao0zvvvtu/O53v4tPfepTLee6dOkSn/rUp+KRRx5pj2cIQK2s4syIWPW58bnPfS4OP/zwuP7662POnDkxZ86c+NnPfhZf/OIX4/Of/3zNHw+gUytAbgBQQwXKjY997GOx9957x9577x3rr79+VWN1W/lNAFiehQsXtvpzQ0NDNDQ0tDr397//PZqammLNNddsdX7NNdeMZ555pt3nCEB9KCczIlZ9bpx//vlRKpXikEMOiffffz8iIrp37x5f+cpX4pxzzqn54wFQnnrNDQDqU73mRlNTU1x77bVx7733xquvvhrNzc2tvn7fffdlHtNKDaBwSqk2R0TE0KFDo3///i3HlClTOvbJAVBTRciMHj16xEUXXRT/+Mc/4sknn4wnn3wy5s+fHxdccEGb3wQBsHxFyA0AaqcIuXHsscfGscceG01NTbHRRhvFpptu2uqohJUaQPFUuN/gMmPEkv3GGxsbW0639cOfNdZYI7p27Rrz5s1rdX7evHmx1lprVTkRANrVKs6MiI7Ljd69e8fGG2/cbuMDFEKBcgOAGihAbvzsZz+LG264IfbYY4+ajanUAKhCY2Njq8BoS48ePWL06NFx7733xr777hsREc3NzXHvvffGV7/61VUwSwDqQTmZEbFqcmO//fYr+7a33HJLTR4TgGzqKTcAqH/1mhs9evSo+hoaH6bUAFgFTjjhhJg4cWJsueWWsfXWW8eFF14Yb731Vhx66KEdPTUA6lB750b//v1rMg4A9cH3GwBksSpz48QTT4yLLrooLr300iiVsl3UfHmUGkDhlOL/9husZowsPve5z8Vrr70W//Vf/xWvvPJKbLbZZjFt2rRlLsoEQH3piMyIaP/cuOaaazLf5+GHH44tt9zSdTYAVqCz5gYA7aOz5saHV4bfd999cccdd8SoUaOie/furb5WycpwpQZt2rXbQbUdsOSa9FSjS/X7C9aBr371q5Z/02ntvvF/dvQUVi51gg8SCqXecmPChAnx5JNPxvDhwzt6KnQC7/xt3Y6eAsvRHM0dPYVVqjM933rLDailq/+yXY1H9HMqaM/c+PDK8M985jM1HV+pARRPKi05qh0DgM5PZrRIikGAlZMbAGTRSXOjvVeGqyWB4kk1OgDo/GQGAFnIDQCykBstJkyYEC+//HJZt1VqAAAAAAAAHSbLynDbTwHFU4sWu5O04ACshMwAIAu5AUAWcqMiSg2gcEppyVHtGAB0fjLj/5RK9bdXL0C9kRsAZCE3KmP7KQAAYKVcKBwAAKgHVmoAxWNpHwDlkhktFi1a1NFTAKh/cgOALORGiywrw5UaQPEIDADKVZDMuOmmm+KGG26Il156Kd59991WX3viiSc6aFYAOVSQ3ACgRuRGiywrw20/BQAABXbxxRfHoYceGmuuuWbMnDkztt5661h99dXjr3/9a0yYMKGjpwcAABTAokWLYvjw4WXd1koNoHBchAmAchUhMy677LKYOnVqfP7zn49rr702Tj755Bg+fHj813/9V8yfP7+jpweQK0XIDQBqpyi5UeuV4VZqAMWTSrU5AOj8CpAZL730UowZMyYiInr16tVy7YyDDz44fvrTn3bk1ADypwC5AUANFSA32mNluFIDAAAKbK211mpZkbHOOuvEo48+GhERs2bNyrSvLQAAwIctXRl+ySWXRI8ePeLkk0+Ou+++O4455phYsGBBRWMqNYDiSTU6AOj8CpAZO++8c/ziF7+IiIhDDz00jj/++Nh1113jc5/7XHzmM5/p4NkB5EwBcgOAGipAbrTHynDX1AAKpyj7FQJQvSJkxtSpU6O5uTkiIiZPnhxrrLFGPPzww7HPPvvEkUce2cGzA8iXIuQGALVThNxYujJ82LBhLSvDN91006pWhis1AACgwLp06RILFy6Mq666Kv785z9HRMTIkSPjkEMOiR49enTw7AAAgDxbujJ88803b1kZftNNN8WMGTNiv/32q2hMpQZQPLVYmlfnLTgANVKAzJgxY0aMHz8+evXqFVtvvXVERFxwwQVx9tlnx1133RVbbLFFB88QIEcKkBsA1FABcqM9VoYrNYDiqcHSvnoPDABqpACZcfzxx8c+++wTV155ZXTrtuTbg/feey+OOOKIOO644+KBBx7o4BkC5EgBcgOAGipAbrTHynAXCgcAgAKbMWNGfP3rX28pNCIiunfvHieffHLMmDGjA2cGAADk3YwZM2LEiBFxwQUXxPz582P+/PlxwQUXxIgRI+KJJ56oaEwrNYDiKcDSPgBqpACZ0djYGC+99FJssMEGrc7PmTMn+vXr10GzAsipAuQGADVUgNxoj5XhSg2geAoQGADUSAEy43Of+1wcfvjhcf7558eYMWMiIuLhhx+Ok046KT7/+c938OwAcqYAuQFADRUgN2bMmNGq0Ij4v5XhW265ZUVjKjUAAKDAzj///CiVSnHIIYfE+++/HxFLvsn4yle+Euecc04Hzw4AAMiz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lBoAAAAAAEAuKDUAAAAAAIBcUGoAAAAAAAC5oNQAAAAAAAByQakBAAAAAADkglIDAAAAAADIBaUGAAAAAACQC0qNOjZ79uwolUpx7bXXrvS2kyZNinXXXbdmj3366adHqVRqdW7dddeNSZMm1ewx6tGOO+4YO+6440pvV0+vRalUitNPP32lt2vr73RVee6552K33XaL/v37R6lUittuuy0iIh5//PEYM2ZM9OnTJ0qlUjz55JMdMj+ohWo+F9Zdd93Ya6+9qnr8cj+/fv3rX0epVIpf//rXVT3eUm1lVUd+3qwq1157bZRKpZg9e/YKbzdp0qTo27dvWWOW+3m+vPt+9atfrei+S5X7Hi73ubeHefPmxf777x+rr756lEqluPDCCyNi+TkDAABA51P4UmPpN+YzZszosDn85Cc/afmmHNpy++23V/yDrnowceLEeOqpp+Kss86K6667Lrbccst477334oADDoj58+fHBRdcENddd10MGzaspo+b99eNjrOybNhxxx1jo402WsWzivjTn/4Up59+eof8MJnO4Te/+U2cfvrp8cYbb3T0VCpy/PHHx5133hmnnnpqXHfddbH77rtHRNs5U0t5f90AAAA6k24dPQGWlBpPP/10HHfcca3ODxs2LN55553o3r17x0zsQ5599tno0qXwPViHuP322+N73/temz+gf+edd6Jbt/r9p/zOO+/EI488Et/4xjda/RbxM888Ey+++GJceeWV8cUvfrFdHntFrxvU2qr4jPzTn/4UZ5xxRuy4447LrM6766672vWxs/jP//zPOOWUUzp6GrmzKj7Pf/Ob38QZZ5wRkyZNigEDBrT6Wh5y/r777otPf/rT8bWvfa3l3PJyppZW9LoBAACwatXvT0KJUqkUPXv27OhptGhoaOjoKdCGenqPtOW1116LiFjmh0Cvvvpqm+chrzr6M7JHjx4d+vgf1K1bt7ouW+tVR3+ed/R7uByvvvrqMrmxvJwBAACgc6rvX8erIzNnzowJEyZEY2Nj9O3bN3bZZZd49NFHW77+xhtvRNeuXePiiy9uOff3v/89unTpEquvvnqklFrOf+UrX4m11lorIpZsYfKrX/0qXnzxxSiVSlEqlVp++3Z519S47bbbYqONNoqePXvGRhttFLfeemubc25ubo4LL7wwRo0aFT179ow111wzjjzyyPjHP/5R0Wvw4b22l27P8vDDD8cJJ5wQAwcOjD59+sRnPvOZlh8wfNAdd9wRY8eOjT59+kS/fv1izz33jD/+8Y8rfdz58+fH1772tdh4442jb9++0djYGBMmTIjf//73rW63dJ/4G264Ic4666wYMmRI9OzZM3bZZZd4/vnnlxl36tSpMWLEiOjVq1dsvfXW8eCDD2Z/UT7gr3/9axxwwAGx2mqrRe/eveOTn/xk/OpXv2r5ekop1lhjjTjhhBNazjU3N8eAAQOia9eurba0OPfcc6Nbt27x5ptvxqRJk+J73/teRETLe+SDe9W3tQf7Qw89FFtttVX07NkzRowYEVdcccVy5/2jH/0oRo8eHb169YrVVlstDjrooJgzZ05Zz3ll/y5OP/30li2lTjrppJb396RJk2LcuHEREXHAAQdEqVRquRbAK6+8EoceemgMGTIkGhoaYvDgwfHpT396me12VvZ+WtnrBrXW1vUI/vCHP8S4ceOiV69eMWTIkDjzzDPjmmuuWe71CB566KHYeuuto2fPnjF8+PD4n//5n5avXXvttXHAAQdERMROO+3U8p5eem2Mtq6p8b//+7+x7777Rp8+fWLQoEFx/PHHx+LFi9uc/2OPPRa777579O/fP3r37h3jxo2Lhx9+uKLXoq1raiy95sPSDGtoaIhRo0bFtGnTlrn/yy+/HIcddlisueaaLbe7+uqry3rsa665JnbeeecYNGhQNDQ0xMiRI+Pyyy9f5nZLr2Oyotd8qT/+8Y+x8847t/p7bG5uLvPV+L/ntO+++0bfvn1j4MCB8bWvfS2amppa3aatz/Nf//rXseWWW7b6PF/RNUtW9PqefvrpcdJJJ0VExHrrrdfyHlr6XmzrPZzluVea8xErz9Cl/82RUorvfe97LXNfXs5ERCxatCiOO+64WHfddaOhoSEGDRoUu+66azzxxBOtHntl7/2VvW4AAACsWn6Nsgx//OMfY+zYsdHY2Bgnn3xydO/ePa644orYcccd4/77749tttkmBgwYEBtttFE88MADccwxx0TEkh9OlUqlmD9/fvzpT3+KUaNGRUTEgw8+GGPHjo2IiG984xuxYMGC+N///d+44IILIiJWeEHRu+66Kz772c/GyJEjY8qUKfH666+3/AD4w4488si49tpr49BDD41jjjkmZs2aFZdeemnMnDkzHn744Zpta3X00UfHRz7ykTjttNNi9uzZceGFF8ZXv/rVuP7661tuc91118XEiRNj/Pjxce6558bbb78dl19+eWy//fYxc+bMFV7k/K9//WvcdtttccABB8R6660X8+bNiyuuuCLGjRsXf/rTn2LttddudftzzjknunTpEl/72tdiwYIF8Z3vfCf+7d/+LR577LGW21x11VVx5JFHxpgxY+K4446Lv/71r7HPPvvEaqutFkOHDs38GsybNy/GjBkTb7/9dhxzzDGx+uqrxw9/+MPYZ5994qabborPfOYzUSqVYrvttosHHnig5X5/+MMfYsGCBdGlS5d4+OGHY88994yIJe+RzTffPPr27RtHHnlkzJ07N+6+++647rrrVjqXp556KnbbbbcYOHBgnH766fH+++/HaaedFmuuueYytz3rrLPim9/8Zhx44IHxxS9+MV577bW45JJLYocddoiZM2eu8Ldey/l3sd9++8WAAQPi+OOPj89//vOxxx57RN++fWPNNdeMj370o3H22WfHMcccE1tttVXL/D772c/GH//4xzj66KNj3XXXjVdffTXuvvvueOmll1reJ+W8n7K+btCWBQsWxN///vdlzr/33nsrve/LL7/cUj6ceuqp0adPn/jBD36w3N+Gf/7552P//fePww8/PCZOnBhXX311TJo0KUaPHh2jRo2KHXbYIY455pi4+OKL4z/+4z9iww03jIho+d8Pe+edd2KXXXaJl156KY455phYe+2147rrrov77rtvmdved999MWHChBg9enScdtpp0aVLl5Zy4MEHH4ytt956pc+3HA899FDccsstcdRRR0W/fv3i4osvjs9+9rPx0ksvxeqrrx4RSz5PP/nJT7aUIAMHDow77rgjDj/88Fi4cOEyWzV+2OWXXx6jRo2KffbZJ7p16xa//OUv46ijjorm5uaYPHlyq9uu7DWPWFK07rTTTvH+++/HKaecEn369ImpU6dGr169yn7eTU1NMX78+Nhmm23i/PPPj3vuuSf++7//O0aMGBFf+cpXlnu/mTNnxu677x6DBw+OM844I5qamuJb3/pWDBw4sKLXd7/99ou//OUv8dOf/jQuuOCCWGONNSIiljteludeTc6Xk6E77LBDXHfddXHwwQfHrrvuGoccckhERGyyySZt5kxExJe//OW46aab4qtf/WqMHDkyXn/99XjooYfiz3/+c2yxxRYRUd57P+vrBgAAQDtLBXfNNdekiEiPP/74cm+z7777ph49eqQXXnih5dzcuXNTv3790g477NBybvLkyWnNNdds+fMJJ5yQdthhhzRo0KB0+eWXp5RSev3111OpVEoXXXRRy+323HPPNGzYsGUed9asWSki0jXXXNNybrPNNkuDBw9Ob7zxRsu5u+66K0VEqzEefPDBFBHpxz/+casxp02b1ub5DzvttNPSh98ew4YNSxMnTmz589LX7lOf+lRqbm5uOX/88cenrl27tsxx0aJFacCAAemII45oNd4rr7yS+vfvv8z5D/vnP/+ZmpqaWp2bNWtWamhoSN/61rdazk2fPj1FRNpwww3T4sWLW85fdNFFKSLSU089lVJK6d13302DBg1Km222WavbTZ06NUVEGjdu3Arn09Zrcdxxx6WISA8++GDLuUWLFqX11lsvrbvuui3zP++881LXrl3TwoULU0opXXzxxWnYsGFp6623Tl//+tdTSik1NTWlAQMGpOOPP75lrMmTJy/z97FURKTTTjut5c/77rtv6tmzZ3rxxRdbzv3pT39KXbt2bTXG7NmzU9euXdNZZ53VarynnnoqdevWbZnzH1buv4ul7+Pzzjuv1f2X/n3deOONLef+8Y9/tHnbD8ryflrR6wYrsvTzbUXHqFGjWt3nw58LRx99dCqVSmnmzJkt515//fW02mqrpYhIs2bNanXfiEgPPPBAy7lXX301NTQ0pBNPPLHl3I033pgiIk2fPn2ZOY8bN67V59eFF16YIiLdcMMNLefeeuuttP7667cao7m5OX3sYx9L48ePb/VZ/vbbb6f11lsv7brrrit8rdrKqrYyJCJSjx490vPPP99y7ve//32KiHTJJZe0nDv88MPT4MGD09///vdW9z/ooINS//7909tvv73C+bT19fHjx6fhw4e3Olfua7708/2xxx5rdbv+/fsv8/fYlokTJ6aIaJVXKaW0+eabp9GjR7c69+HP87333jv17t07vfzyyy3nnnvuudStW7eKX9/zzjtvufNeXrat7LlXm/PlZujS5zl58uRW919ezvTv33+Z235Qlvf+il43AAAAVi3bT61EU1NT3HXXXbHvvvvG8OHDW84PHjw4vvCFL8RDDz0UCxcujIiIsWPHxrx58+LZZ5+NiCW/bb/DDjvE2LFjW7Y2euihhyKl1LJSI4u//e1v8eSTT8bEiROjf//+Led33XXXGDlyZKvb3njjjdG/f//Ydddd4+9//3vLMXr06Ojbt29Mnz498+Mvz5e+9KVW22CMHTs2mpqa4sUXX4yIiLvvvjveeOON+PznP99qLl27do1tttlmpXNpaGhouXBpU1NTvP7669G3b9/4xCc+scwWEhERhx56aKu95Ze+1n/9618jImLGjBnx6quvxpe//OVWt5s0aVKr1zWL22+/PbbeeuvYfvvtW8717ds3vvSlL8Xs2bPjT3/6U8tcmpqa4je/+U1E/N+qnQ++R55++ul44403KnqPNDU1xZ133hn77rtvrLPOOi3nN9xwwxg/fnyr295yyy3R3NwcBx54YKu/l7XWWis+9rGPrfDvJcu/iyx69eoVPXr0iF//+tfL3Sat2vcTZPG9730v7r777mWOTTbZZKX3nTZtWmy77bax2WabtZxbbbXV4t/+7d/avP3IkSNb/bsfOHBgfOITn2j57Mrq9ttvj8GDB8f+++/fcq53797xpS99qdXtnnzyyXjuuefiC1/4Qrz++ust/6beeuut2GWXXeKBBx7IvNXS8nzqU5+KESNGtPx5k002icbGxpbnmFKKm2++Ofbee+9IKbX6Nz5+/PhYsGBBm5/7H/TBVQRLV9qMGzcu/vrXv8aCBQta3bac1/z222+PT37yk61WqwwcOHC5f4/L8+Uvf7nVn8eOHbvCv9umpqa45557Yt999221InH99dePCRMmtHmflb2+WZX73Kv9XC43Q7MaMGBAPPbYYzF37tw2v74q3/sAAADUju2nVuK1116Lt99+Oz7xiU8s87UNN9wwmpubY86cOTFq1KiWH4w8+OCDMWTIkJg5c2aceeaZMXDgwDj//PNbvtbY2Bibbrpp5rksLQk+9rGPLfO1D/+A/7nnnosFCxbEoEGD2hxr6UWaa+GDPzyPiPjIRz4SEdHyQ+nnnnsuIiJ23nnnNu/f2Ni4wvGbm5vjoosuissuuyxmzZrVag/ypduVZJnP8l7H7t27t/oBfRYvvvhibLPNNsucX7otzIsvvhgbbbRRbLHFFtG7d+948MEHY/z48fHggw/GGWecEWuttVZccskl8c9//rOl3PjgD3fK9dprr8U777yz3PfI7bff3vLn5557LlJKbd42Ila4PVmWfxdZNDQ0xLnnnhsnnnhirLnmmvHJT34y9tprrzjkkENarkNT7fsJsth6661jyy23XOb8Rz7ykTa3pfqgF198Mbbddttlzq+//vpt3v7Dn11LH6fS6yC9+OKLsf766y9z7YUP/7td+m9q4sSJyx1rwYIFLZ+l1VjZc3zttdfijTfeiKlTp8bUqVPbHGNl+fXwww/HaaedFo888ki8/fbbrb62YMGCVuV1Oa/58j7f2/r8W56ePXsus1XRyv5uX3311XjnnXfafL+syvdQOc+92s/lcjM0q+985zsxceLEGDp0aIwePTr22GOPOOSQQ1qyflW+9wEAAKgdpUYNrb322rHeeuvFAw88EOuuu26klGLbbbeNgQMHxrHHHhsvvvhiPPjggzFmzJiWlQftpbm5OQYNGhQ//vGP2/x6LfeB7tq1a5vn078ujr70txyvu+66lh9Mf1C3bit+G5599tnxzW9+Mw477LD49re/Hauttlp06dIljjvuuDZ/g3Jl8+lI3bt3j2222SYeeOCBeP755+OVV16JsWPHxpprrhnvvfdePPbYY/Hggw/GBhts0O57dTc3N0epVIo77rijzddsRdd2aU/HHXdc7L333nHbbbfFnXfeGd/85jdjypQpcd9998Xmm29e9fsJ6lVHfXYt/Td13nnntVpV8kG1+jwoNy/+/d//fbk/aF7RKpkXXnghdtlll9hggw3iu9/9bgwdOjR69OgRt99+e1xwwQXLZMaqes2X9zi11tHvoXr7XD7wwANj7Nixceutt8Zdd90V5513Xpx77rlxyy23xIQJE1bpex8AAIDa8dO/lRg4cGD07t27ZUupD3rmmWeiS5curS4sPXbs2HjggQdivfXWi8022yz69esXm266afTv3z+mTZsWTzzxRJxxxhmtxvnwb9Euz7BhwyLi/36z8IM+PL8RI0bEPffcE9ttt12mi5m2h6VbYQwaNCg+9alPZb7/TTfdFDvttFNcddVVrc6/8cYbLRfrzOKDr+MHf6v0vffei1mzZlW0imbYsGHLfY988DEjlrxHzj333LjnnntijTXWiA022CBKpVKMGjUqHnzwwXjwwQdjr732ajVOue+RgQMHRq9evcp+j6SUYr311ouPf/zjZY3/wcfJ8u8iqxEjRsSJJ54YJ554Yjz33HOx2WabxX//93/Hj370o0zvp3JfN2gPw4YNi+eff36Z822dK1eW9/SwYcPi6aefjpRSq/u19VkQseS36Sv5jK6lgQMHRr9+/aKpqamiufzyl7+MxYsXxy9+8YtWqxaq2ZZu2LBhZX2m1tqgQYOiZ8+eHf4eKjdPIirP+SwZmtXgwYPjqKOOiqOOOipeffXV2GKLLeKss86KCRMmZHrvyxMAAID64ZoaK9G1a9fYbbfd4uc//3nMnj275fy8efPiJz/5SWy//fattlUYO3ZszJ49O66//vqW7ai6dOkSY8aMie9+97vx3nvvLXOthD59+iyzz3dbBg8eHJtttln88Ic/bHX7u+++e5n9pg888MBoamqKb3/728uM8/7778cbb7xRztOvifHjx0djY2OcffbZ8d577y3z9ddee22F9+/atesyv2V64403xssvv1zRfLbccssYOHBgfP/7349333235fy1115b8euyxx57xG9/+9t45JFHWs699dZbMXXq1Fh33XVbXfNk7NixsXjx4rjwwgtj++23b/lBydixY+O6666LuXPntvkeiYiVzq9r164xfvz4uO222+Kll15qOf/nP/857rzzzla33W+//aJr165xxhlnLPP6ppTi9ddfX+HjZPl3Ua633347/vnPf7Y6N2LEiOjXr18sXrw4IrK9n8p93aA9jB8/Ph555JF48sknW87Nnz9/uSvoypHlPb3HHnvE3Llz46abbmo59/bbby+zrdPo0aNjxIgRcf7558ebb765zDgr+4yupa5du8ZnP/vZuPnmm+Ppp5/OPJelKxU++Jm2YMGCuOaaayqe0x577BGPPvpo/Pa3v201j2r+HsvRtWvX+NSnPhW33XZbq2tCPP/883HHHXdUPG7W91A5z73anM+SoeVqampa5r+tBg0aFGuvvXZLnmR578sTAACA+mGlxr9cffXVMW3atGXOH3vssXHmmWfG3XffHdtvv30cddRR0a1bt7jiiiti8eLF8Z3vfKfV7Zf+MPrZZ5+Ns88+u+X8DjvsEHfccUc0NDTEVltt1eo+o0ePjuuvvz5OOOGE2GqrraJv376x9957tznPKVOmxJ577hnbb799HHbYYTF//vy45JJLYtSoUa2+IR83blwceeSRMWXKlHjyySdjt912i+7du8dzzz0XN954Y1x00UWtLh7bnhobG+Pyyy+Pgw8+OLbYYos46KCDYuDAgfHSSy/Fr371q9huu+3i0ksvXe7999prr/jWt74Vhx56aIwZMyaeeuqp+PGPf1zx9S+6d+8eZ555Zhx55JGx8847x+c+97mYNWtWXHPNNRWPecopp8RPf/rTmDBhQhxzzDGx2mqrxQ9/+MOYNWtW3Hzzza22G9t2222jW7du8eyzz7a6YO8OO+wQl19+eUTEMqXG6NGjIyLimGOOifHjx0fXrl3joIMOanMuZ5xxRkybNi3Gjh0bRx11VLz//vst75E//OEPLbcbMWJEnHnmmXHqqafG7NmzY999941+/frFrFmz4tZbb40vfelL8bWvfW25zznLv4ty/eUvf4lddtklDjzwwBg5cmR069Ytbr311pg3b17L883yfsryukGtnXzyyfGjH/0odt111zj66KOjT58+8YMf/CDWWWedmD9/fkW/+b3ZZptF165d49xzz40FCxZEQ0ND7Lzzzm1eP+mII46ISy+9NA455JD43e9+F4MHD47rrrsuevfu3ep2Xbp0iR/84AcxYcKEGDVqVBx66KHx0Y9+NF5++eWYPn16NDY2xi9/+cuKX4eszjnnnJg+fXpss802ccQRR8TIkSNj/vz58cQTT8Q999wT8+fPX+59d9ttt+jRo0fsvffeceSRR8abb74ZV155ZQwaNCj+9re/VTSfk08+Oa677rrYfffd49hjj40+ffrE1KlTY9iwYa0+U9vD6aefHnfddVdst9128ZWvfCWampri0ksvjY022qhVWZbF0s/Fb3zjG3HQQQdF9+7dY++99275of0Hlfvcq835LBlarkWLFsWQIUNi//33j0033TT69u0b99xzTzz++OPx3//93xGR7b2f5XUDAACgnaWCu+aaa1JELPeYM2dOSimlJ554Io0fPz717ds39e7dO+20007pN7/5TZtjDho0KEVEmjdvXsu5hx56KEVEGjt27DK3f/PNN9MXvvCFNGDAgBQRadiwYSmllGbNmpUiIl1zzTWtbn/zzTenDTfcMDU0NKSRI0emW265JU2cOLHlfh80derUNHr06NSrV6/Ur1+/tPHGG6eTTz45zZ07d4Wvy2mnnZY+/PYYNmxYmjhx4jKv3eOPP97qdtOnT08RkaZPn77M+fHjx6f+/funnj17phEjRqRJkyalGTNmrHAu//znP9OJJ56YBg8enHr16pW222679Mgjj6Rx48alcePGLfO4N954Y6v7L+91vOyyy9J6662XGhoa0pZbbpkeeOCBZcZcng+/Fiml9MILL6T9998/DRgwIPXs2TNtvfXW6f/9v//X5v232mqrFBHpscceazn3v//7vyki0tChQ5e5/fvvv5+OPvroNHDgwFQqlVr93UREOu2001rd/v7770+jR49OPXr0SMOHD0/f//732/w7TWnJ+2n77bdPffr0SX369EkbbLBBmjx5cnr22WdX+jqU8+9i6et/3nnntTrf1t/X3//+9zR58uS0wQYbpD59+qT+/funbbbZJt1www3LPHY576cVvW6wIsv7fFtq3LhxadSoUa3OtfW5MHPmzDR27NjU0NCQhgwZkqZMmZIuvvjiFBHplVdeaXXfPffcs83H+fBn0pVXXpmGDx+eunbt2uqztq3bvvjii2mfffZJvXv3TmussUY69thj07Rp09r8jJ45c2bab7/90uqrr54aGhrSsGHD0oEHHpjuvffe5b9Qqe3P2LY+byIiTZ48eZn7t/W6zZs3L02ePDkNHTo0de/ePa211lppl112SVOnTl3hXFJK6Re/+EXaZJNNUs+ePdO6666bzj333HT11VeniEizZs1q9bjlvuZ/+MMf0rhx41LPnj3TRz/60fTtb387XXXVVcuM2ZaJEyemPn36LHN+ea/Rhz/P77333rT55punHj16pBEjRqQf/OAH6cQTT0w9e/Zc5r7lvr7f/va300c/+tHUpUuXVs+hrdtmee6V5nxK5WdoW8+zrZxZvHhxOumkk9Kmm26a+vXrl/r06ZM23XTTdNllly0zZrnv/eW9bgAAAKxapZTq4OrJAFAQxx13XFxxxRXx5ptvrrILSNO57LvvvvHHP/6xzetdAAAAQGfnmhoA0E7eeeedVn9+/fXX47rrrovtt99eoUFZPvweeu655+L222+PHXfcsWMmBAAAAB3MSg0AaCebbbZZ7LjjjrHhhhvGvHnz4qqrroq5c+fGvffeGzvssENHT48cGDx4cEyaNCmGDx8eL774Ylx++eWxePHimDlzZnzsYx/r6OkBAADAKudC4QDQTvbYY4+46aabYurUqVEqlWKLLbaIq666SqFB2Xbffff46U9/Gq+88ko0NDTEtttuG2effbZCAwAAgMKyUgMAAAAAAMgF19QAAAAAAAByQakBAAAAAADkQlnX1Ghubo65c+dGv379olQqtfec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", - "text/plain": [ - "
    " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig = plt.figure(figsize=(16, 18), tight_layout=True)\n", "ax_dict = fig.subplot_mosaic(\n", From f78e399583c025a9b1f9b8e08c149b472d8af7f1 Mon Sep 17 00:00:00 2001 From: Claire Phillips Date: Tue, 27 Feb 2024 01:18:20 +0000 Subject: [PATCH 3/3] Fresh commit to trigger new round of tests on exposure PR --- intertidal/elevation.py | 1 - 1 file changed, 1 deletion(-) diff --git a/intertidal/elevation.py b/intertidal/elevation.py index 577bc971..2ea0c763 100644 --- a/intertidal/elevation.py +++ b/intertidal/elevation.py @@ -45,7 +45,6 @@ from intertidal.exposure import exposure from intertidal.tidal_bias_offset import bias_offset, tidal_offset_tidelines - def extract_geobox( study_area=None, geom=None,
    \n", - " Comm: tcp://127.0.0.1:40037\n", + " Comm: tcp://127.0.0.1:46491\n", " \n", " Total threads: 15\n", @@ -422,7 +443,7 @@ "
    \n", - " Dashboard: /user/claire.phillips@ga.gov.au/proxy/37553/status\n", + " Dashboard: /user/claire.phillips@ga.gov.au/proxy/42263/status\n", " \n", " Memory: 117.21 GiB\n", @@ -430,13 +451,13 @@ "
    \n", - " Nanny: tcp://127.0.0.1:32849\n", + " Nanny: tcp://127.0.0.1:36407\n", "
    \n", - " Local directory: /tmp/dask-worker-space/worker-p_p1xl17\n", + " Local directory: /tmp/dask-worker-space/worker-vs62yglb\n", "